diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 2082904a2b28..49c7f161190e 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -12,3 +12,4 @@
/java-spanner/ @googleapis/spanner-team @googleapis/cloud-sdk-java-team
/java-spanner-jdbc/ @googleapis/spanner-team @googleapis/cloud-sdk-java-team
/google-auth-library-java/ @googleapis/cloud-sdk-auth-team @googleapis/cloud-sdk-java-team
+/java-storage-nio/ @googleapis/gcs-team @googleapis/cloud-sdk-java-team
diff --git a/.github/workflows/java-storage-nio-ci.yaml b/.github/workflows/java-storage-nio-ci.yaml
new file mode 100644
index 000000000000..56d39506143c
--- /dev/null
+++ b/.github/workflows/java-storage-nio-ci.yaml
@@ -0,0 +1,139 @@
+# Copyright 2022 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# Github action job to test core java library features on
+# downstream client libraries before they are released.
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+name: java-storage-nio ci
+env:
+ BUILD_SUBDIR: java-storage-nio
+jobs:
+ filter:
+ runs-on: ubuntu-latest
+ outputs:
+ library: ${{ steps.filter.outputs.library }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dorny/paths-filter@v3
+ id: filter
+ with:
+ filters: |
+ library:
+ - 'java-storage-nio/**'
+ units:
+ needs: filter
+ if: ${{ needs.filter.outputs.library == 'true' }}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ java: [11, 17, 21, 25]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: ${{matrix.java}}
+ - run: java -version
+ - run: .kokoro/build.sh
+ env:
+ JOB_TYPE: test
+ units-java8:
+ needs: filter
+ if: ${{ needs.filter.outputs.library == 'true' }}
+ # Building using Java 17 and run the tests with Java 8 runtime
+ name: "units (8)"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ java-version: 8
+ distribution: temurin
+ - name: "Set jvm system property environment variable for surefire plugin (unit tests)"
+ # Maven surefire plugin (unit tests) allows us to specify JVM to run the tests.
+ # https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#jvm
+ run: echo "SUREFIRE_JVM_OPT=-Djvm=${JAVA_HOME}/bin/java -P !java17" >> $GITHUB_ENV
+ shell: bash
+ - uses: actions/setup-java@v4
+ with:
+ java-version: 17
+ distribution: temurin
+ - run: .kokoro/build.sh
+ env:
+ JOB_TYPE: test
+ windows:
+ needs: filter
+ if: ${{ needs.filter.outputs.library == 'true' }}
+ runs-on: windows-latest
+ steps:
+ - name: Support longpaths
+ run: git config --system core.longpaths true
+ - name: Support longpaths
+ run: git config --system core.longpaths true
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: 8
+ - run: java -version
+ - run: .kokoro/build.sh
+ env:
+ JOB_TYPE: test
+ dependencies:
+ needs: filter
+ if: ${{ needs.filter.outputs.library == 'true' }}
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ java: [17]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: ${{matrix.java}}
+ - run: java -version
+ - run: .kokoro/dependencies.sh
+ javadoc:
+ needs: filter
+ if: ${{ needs.filter.outputs.library == 'true' }}
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: 17
+ - run: java -version
+ - run: .kokoro/build.sh
+ env:
+ JOB_TYPE: javadoc
+ lint:
+ needs: filter
+ if: ${{ needs.filter.outputs.library == 'true' }}
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: 17
+ - run: java -version
+ - run: .kokoro/build.sh
+ env:
+ JOB_TYPE: lint
diff --git a/.kokoro/common.sh b/.kokoro/common.sh
index 3b3c8745febc..62085b6ddb97 100644
--- a/.kokoro/common.sh
+++ b/.kokoro/common.sh
@@ -32,6 +32,7 @@ excluded_modules=(
'java-spanner'
'java-spanner-jdbc'
'google-auth-library-java'
+ 'java-storage-nio'
)
function retry_with_backoff {
diff --git a/.kokoro/presubmit/storage-nio-graalvm-native-presubmit.cfg b/.kokoro/presubmit/storage-nio-graalvm-native-presubmit.cfg
new file mode 100644
index 000000000000..a729b538d1d1
--- /dev/null
+++ b/.kokoro/presubmit/storage-nio-graalvm-native-presubmit.cfg
@@ -0,0 +1,38 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+# Configure the docker image for kokoro-trampoline.
+env_vars: {
+ key: "TRAMPOLINE_IMAGE"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.58.0" # {x-version-update:google-cloud-shared-dependencies:current}
+}
+
+env_vars: {
+ key: "JOB_TYPE"
+ value: "graalvm-single"
+}
+
+# TODO: remove this after we've migrated all tests and scripts
+env_vars: {
+ key: "GCLOUD_PROJECT"
+ value: "gcloud-devel"
+}
+
+env_vars: {
+ key: "GOOGLE_CLOUD_PROJECT"
+ value: "gcloud-devel"
+}
+
+env_vars: {
+ key: "GOOGLE_APPLICATION_CREDENTIALS"
+ value: "secret_manager/java-it-service-account"
+}
+
+env_vars: {
+ key: "SECRET_MANAGER_KEYS"
+ value: "java-it-service-account"
+}
+
+env_vars: {
+ key: "BUILD_SUBDIR"
+ value: "java-storage-nio"
+}
diff --git a/.kokoro/presubmit/storage-nio-integration.cfg b/.kokoro/presubmit/storage-nio-integration.cfg
new file mode 100644
index 000000000000..5f988c285c12
--- /dev/null
+++ b/.kokoro/presubmit/storage-nio-integration.cfg
@@ -0,0 +1,39 @@
+# 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/java11"
+}
+
+env_vars: {
+ key: "JOB_TYPE"
+ value: "integration-single"
+}
+
+# TODO: remove this after we've migrated all tests and scripts
+env_vars: {
+ key: "GCLOUD_PROJECT"
+ value: "gcloud-devel"
+}
+
+env_vars: {
+ key: "GOOGLE_CLOUD_PROJECT"
+ value: "gcloud-devel"
+}
+
+env_vars: {
+ key: "GOOGLE_APPLICATION_CREDENTIALS"
+ value: "secret_manager/java-it-service-account"
+}
+
+env_vars: {
+ key: "SECRET_MANAGER_KEYS"
+ value: "java-it-service-account"
+}
+
+
+env_vars: {
+ key: "BUILD_SUBDIR"
+ value: "java-storage-nio"
+}
diff --git a/generation/check_non_release_please_versions.sh b/generation/check_non_release_please_versions.sh
index 633f4fd0ab9a..1841f4084fef 100755
--- a/generation/check_non_release_please_versions.sh
+++ b/generation/check_non_release_please_versions.sh
@@ -16,6 +16,7 @@ for pomFile in $(find . -mindepth 2 -name pom.xml | sort ); do
[[ "${pomFile}" =~ .*java-spanner.* ]] || \
[[ "${pomFile}" =~ .*java-spanner-jdbc.* ]] || \
[[ "${pomFile}" =~ .*google-auth-library-java.* ]] || \
+ [[ "${pomFile}" =~ .*java-storage-nio.* ]] || \
[[ "${pomFile}" =~ .*.github*. ]]; then
continue
fi
diff --git a/java-storage-nio/.gemini/config.yaml b/java-storage-nio/.gemini/config.yaml
new file mode 100644
index 000000000000..8afb84853471
--- /dev/null
+++ b/java-storage-nio/.gemini/config.yaml
@@ -0,0 +1,10 @@
+# https://developers.google.com/gemini-code-assist/docs/customize-gemini-behavior-github#custom-configuration
+have_fun: false
+code_review:
+ disable: false
+ comment_severity_threshold: HIGH
+ max_review_comments: -1
+ pull_request_opened:
+ help: false
+ summary: false
+ code_review: false
diff --git a/java-storage-nio/.repo-metadata.json b/java-storage-nio/.repo-metadata.json
new file mode 100644
index 000000000000..fcc3b4d2a559
--- /dev/null
+++ b/java-storage-nio/.repo-metadata.json
@@ -0,0 +1,15 @@
+{
+ "api_shortname": "storage_nio",
+ "name_pretty": "NIO Filesystem Provider for Google Cloud Storage",
+ "api_description": "provides a Google Cloud Storage extension for Java's NIO Filesystem.",
+ "product_documentation": "https://cloud.google.com/storage/docs",
+ "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-nio/latest/history",
+ "release_level": "preview",
+ "language": "java",
+ "repo": "googleapis/google-cloud-java",
+ "repo_short": "google-cloud-java",
+ "distribution_name": "com.google.cloud:google-cloud-nio",
+ "api_id": "storage.googleapis.com",
+ "library_type": "OTHER",
+ "codeowner_team": "@googleapis/gcs-team"
+}
diff --git a/java-storage-nio/CHANGELOG.md b/java-storage-nio/CHANGELOG.md
new file mode 100644
index 000000000000..1760c9384a6a
--- /dev/null
+++ b/java-storage-nio/CHANGELOG.md
@@ -0,0 +1,1423 @@
+# Changelog
+
+## [0.128.14](https://github.com/googleapis/java-storage-nio/compare/v0.128.13...v0.128.14) (2026-03-26)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20260204-2.0.0 ([#1750](https://github.com/googleapis/java-storage-nio/issues/1750)) ([70eef35](https://github.com/googleapis/java-storage-nio/commit/70eef3562551f9e964269284a004775cd325c2a3))
+* Update dependency com.google.cloud:google-cloud-storage to v2.64.1 ([#1752](https://github.com/googleapis/java-storage-nio/issues/1752)) ([0851342](https://github.com/googleapis/java-storage-nio/commit/08513421255f6b9dbb7ef7904f2b10f04dc87075))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.58.0 ([#1751](https://github.com/googleapis/java-storage-nio/issues/1751)) ([2cd5f71](https://github.com/googleapis/java-storage-nio/commit/2cd5f716c3c67e7a71313abf984ff17537abeab8))
+
+## [0.128.13](https://github.com/googleapis/java-storage-nio/compare/v0.128.12...v0.128.13) (2026-02-27)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.64.0 ([#1745](https://github.com/googleapis/java-storage-nio/issues/1745)) ([8c3d9b2](https://github.com/googleapis/java-storage-nio/commit/8c3d9b284db15442449ef9bfe2bec137831ab8f5))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.57.0 ([#1744](https://github.com/googleapis/java-storage-nio/issues/1744)) ([9370e91](https://github.com/googleapis/java-storage-nio/commit/9370e9115196f210db2726c4a04e0c23a8f3119c))
+
+## [0.128.12](https://github.com/googleapis/java-storage-nio/compare/v0.128.11...v0.128.12) (2026-02-13)
+
+
+### Dependencies
+
+* Update actions/setup-node action to v6 ([#1688](https://github.com/googleapis/java-storage-nio/issues/1688)) ([f69b18e](https://github.com/googleapis/java-storage-nio/commit/f69b18edad7f9b5c661588f822322202d86aa172))
+* Update dependency com.google.cloud:google-cloud-storage to v2.63.0 ([#1739](https://github.com/googleapis/java-storage-nio/issues/1739)) ([ab6f616](https://github.com/googleapis/java-storage-nio/commit/ab6f616a9e81a56a55825bad3c633c48c4bb8edd))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.56.1 ([#1736](https://github.com/googleapis/java-storage-nio/issues/1736)) ([3dd4070](https://github.com/googleapis/java-storage-nio/commit/3dd40703954eab70c3e9f4bacfaf626b0a03f8de))
+* Update dependency node to v24 ([#1695](https://github.com/googleapis/java-storage-nio/issues/1695)) ([f2df429](https://github.com/googleapis/java-storage-nio/commit/f2df4297f292244f554a148b6aeace7380b63047))
+
+## [0.128.11](https://github.com/googleapis/java-storage-nio/compare/v0.128.10...v0.128.11) (2026-01-28)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.56.0 ([#1729](https://github.com/googleapis/java-storage-nio/issues/1729)) ([bc62ff5](https://github.com/googleapis/java-storage-nio/commit/bc62ff565e19dd97b4c25e327b94887c7bb0e8f4))
+
+## [0.128.10](https://github.com/googleapis/java-storage-nio/compare/v0.128.9...v0.128.10) (2026-01-16)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.62.0 ([#1721](https://github.com/googleapis/java-storage-nio/issues/1721)) ([aea8635](https://github.com/googleapis/java-storage-nio/commit/aea86353f90e29b5da5e9409e45e8e3a27231698))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.55.1 ([#1725](https://github.com/googleapis/java-storage-nio/issues/1725)) ([4701cca](https://github.com/googleapis/java-storage-nio/commit/4701ccaa028482880f087690d48649be71e5604e))
+* Update dependency org.ow2.asm:asm to v9.9.1 ([#1717](https://github.com/googleapis/java-storage-nio/issues/1717)) ([edd4ec4](https://github.com/googleapis/java-storage-nio/commit/edd4ec46b9ad0cd365c1c06d7859611ba59d3dd9))
+* Update dependency org.ow2.asm:asm-commons to v9.9.1 ([#1718](https://github.com/googleapis/java-storage-nio/issues/1718)) ([ecf4ebe](https://github.com/googleapis/java-storage-nio/commit/ecf4ebe09d0a75178457847e5695ba239e171dc9))
+
+## [0.128.9](https://github.com/googleapis/java-storage-nio/compare/v0.128.8...v0.128.9) (2025-12-15)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20251118-2.0.0 ([#1710](https://github.com/googleapis/java-storage-nio/issues/1710)) ([55c6f31](https://github.com/googleapis/java-storage-nio/commit/55c6f3147a838eefd79df9012dd6e7f789e3fbab))
+* Update dependency com.google.cloud:google-cloud-storage to v2.61.0 ([#1712](https://github.com/googleapis/java-storage-nio/issues/1712)) ([aaf92d0](https://github.com/googleapis/java-storage-nio/commit/aaf92d044542ddd6dec565207a60c18b30604aba))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.2 ([#1709](https://github.com/googleapis/java-storage-nio/issues/1709)) ([abf9691](https://github.com/googleapis/java-storage-nio/commit/abf9691683ed0df4605c7ed16de163806c47eec4))
+
+## [0.128.8](https://github.com/googleapis/java-storage-nio/compare/v0.128.7...v0.128.8) (2025-11-10)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.60.0 ([#1698](https://github.com/googleapis/java-storage-nio/issues/1698)) ([fcd73eb](https://github.com/googleapis/java-storage-nio/commit/fcd73eb7382d259315b07f880659a4d7d6666f0e))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.1 ([#1696](https://github.com/googleapis/java-storage-nio/issues/1696)) ([bc5c5f4](https://github.com/googleapis/java-storage-nio/commit/bc5c5f45f65df810ac813cb2e59b7d6d5b90052c))
+
+## [0.128.7](https://github.com/googleapis/java-storage-nio/compare/v0.128.6...v0.128.7) (2025-10-21)
+
+
+### Bug Fixes
+
+* Remove explicit guava version from examples module ([#1685](https://github.com/googleapis/java-storage-nio/issues/1685)) ([76291ce](https://github.com/googleapis/java-storage-nio/commit/76291cefe3aba7a72d1fc1396c6a80c645a813e0))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.59.0 ([6c3e5ee](https://github.com/googleapis/java-storage-nio/commit/6c3e5eeb4b815158a86d83f5f60736ec99e9aaee)), closes [#1690](https://github.com/googleapis/java-storage-nio/issues/1690)
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.53.0 ([6c3e5ee](https://github.com/googleapis/java-storage-nio/commit/6c3e5eeb4b815158a86d83f5f60736ec99e9aaee)), closes [#1689](https://github.com/googleapis/java-storage-nio/issues/1689)
+
+## [0.128.6](https://github.com/googleapis/java-storage-nio/compare/v0.128.5...v0.128.6) (2025-10-07)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250925-2.0.0 ([#1668](https://github.com/googleapis/java-storage-nio/issues/1668)) ([998c565](https://github.com/googleapis/java-storage-nio/commit/998c56528b521e7c3604bc13c4c04f047fa0cb42))
+* Update dependency com.google.cloud:google-cloud-storage to v2.58.1 ([#1678](https://github.com/googleapis/java-storage-nio/issues/1678)) ([021de43](https://github.com/googleapis/java-storage-nio/commit/021de436e63f774f00049f2383adffbb4e1a2fff))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.3 ([#1671](https://github.com/googleapis/java-storage-nio/issues/1671)) ([30984fd](https://github.com/googleapis/java-storage-nio/commit/30984fdd919a7ea173ce3875b42e1812fb589ebb))
+* Update dependency org.ow2.asm:asm to v9.9 ([#1673](https://github.com/googleapis/java-storage-nio/issues/1673)) ([30e5c66](https://github.com/googleapis/java-storage-nio/commit/30e5c66560805fa67c06e36b938eafcd543602ed))
+* Update dependency org.ow2.asm:asm-commons to v9.9 ([#1674](https://github.com/googleapis/java-storage-nio/issues/1674)) ([fc8bcb2](https://github.com/googleapis/java-storage-nio/commit/fc8bcb2bb0c70cb59a54455d0cd1f934cc6e15f0))
+
+## [0.128.5](https://github.com/googleapis/java-storage-nio/compare/v0.128.4...v0.128.5) (2025-09-23)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.58.0 ([#1661](https://github.com/googleapis/java-storage-nio/issues/1661)) ([5eafd92](https://github.com/googleapis/java-storage-nio/commit/5eafd928dd57246ec462735d3cf308de6fa3e685))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.2 ([#1658](https://github.com/googleapis/java-storage-nio/issues/1658)) ([2a6ee3f](https://github.com/googleapis/java-storage-nio/commit/2a6ee3fddf3f53dc815a482214301560264f0e0a))
+
+## [0.128.4](https://github.com/googleapis/java-storage-nio/compare/v0.128.3...v0.128.4) (2025-09-10)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.57.0 ([#1650](https://github.com/googleapis/java-storage-nio/issues/1650)) ([88e834b](https://github.com/googleapis/java-storage-nio/commit/88e834b56619f57f507090e91ad9d8dca9737872))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.1 ([#1647](https://github.com/googleapis/java-storage-nio/issues/1647)) ([0462132](https://github.com/googleapis/java-storage-nio/commit/0462132f9b635a134d20676d504a65d8b7ac5ceb))
+
+## [0.128.3](https://github.com/googleapis/java-storage-nio/compare/v0.128.2...v0.128.3) (2025-08-25)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250815-2.0.0 ([#1637](https://github.com/googleapis/java-storage-nio/issues/1637)) ([ab95792](https://github.com/googleapis/java-storage-nio/commit/ab95792e6d6722f6e5ed2edce235099af0eda56f))
+* Update dependency com.google.cloud:google-cloud-storage to v2.56.0 ([#1641](https://github.com/googleapis/java-storage-nio/issues/1641)) ([f20e476](https://github.com/googleapis/java-storage-nio/commit/f20e476b3205e548998cf46f1ac7233e3efb3d7b))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.0 ([#1638](https://github.com/googleapis/java-storage-nio/issues/1638)) ([fe3f802](https://github.com/googleapis/java-storage-nio/commit/fe3f80270168251686926f2ff15949cac8a3c73b))
+
+## [0.128.2](https://github.com/googleapis/java-storage-nio/compare/v0.128.1...v0.128.2) (2025-08-06)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.55.0 ([#1632](https://github.com/googleapis/java-storage-nio/issues/1632)) ([2b581e2](https://github.com/googleapis/java-storage-nio/commit/2b581e20e36a134443e8f653dc9a12d40cd7f406))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.51.0 ([#1630](https://github.com/googleapis/java-storage-nio/issues/1630)) ([811a28d](https://github.com/googleapis/java-storage-nio/commit/811a28d13c888f8b27a93100e91fea65e8f86832))
+
+## [0.128.1](https://github.com/googleapis/java-storage-nio/compare/v0.128.0...v0.128.1) (2025-07-29)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250718-2.0.0 ([#1624](https://github.com/googleapis/java-storage-nio/issues/1624)) ([7a84881](https://github.com/googleapis/java-storage-nio/commit/7a84881ec533e9f9afcac1d342e794784d0d113b))
+* Update dependency com.google.cloud:google-cloud-storage to v2.54.0 ([#1626](https://github.com/googleapis/java-storage-nio/issues/1626)) ([b3a90b6](https://github.com/googleapis/java-storage-nio/commit/b3a90b687fe8f91af3f610252e83da2986b9ed52))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.2 ([#1623](https://github.com/googleapis/java-storage-nio/issues/1623)) ([9861f8b](https://github.com/googleapis/java-storage-nio/commit/9861f8b3c5549941744c2bfe65afa5089633a3bf))
+
+## [0.128.0](https://github.com/googleapis/java-storage-nio/compare/v0.127.38...v0.128.0) (2025-07-11)
+
+
+### Features
+
+* Implement CloudStorageFileSystemProvider.move method using the moveBlob API ([#1610](https://github.com/googleapis/java-storage-nio/issues/1610)) ([bdd785e](https://github.com/googleapis/java-storage-nio/commit/bdd785ee34ba3fe5a63ff7edba9ab1b63ed9e383))
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250629-2.0.0 ([#1616](https://github.com/googleapis/java-storage-nio/issues/1616)) ([bdc7489](https://github.com/googleapis/java-storage-nio/commit/bdc7489fc2c97651bd04a7dd115dfd4bc6083518))
+* Update dependency com.google.cloud:google-cloud-storage to v2.53.3 ([#1619](https://github.com/googleapis/java-storage-nio/issues/1619)) ([f4b1105](https://github.com/googleapis/java-storage-nio/commit/f4b11054cf96a6f561d554c1536381462abff379))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.1 ([#1617](https://github.com/googleapis/java-storage-nio/issues/1617)) ([2d4aec1](https://github.com/googleapis/java-storage-nio/commit/2d4aec1e948ceede870925ce80603f72a950b2f7))
+
+## [0.127.38](https://github.com/googleapis/java-storage-nio/compare/v0.127.37...v0.127.38) (2025-06-26)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250605-2.0.0 ([#1604](https://github.com/googleapis/java-storage-nio/issues/1604)) ([36fb6a9](https://github.com/googleapis/java-storage-nio/commit/36fb6a9a4bd56055d647d7caee330dbf824d95e5))
+* Update dependency com.google.cloud:google-cloud-storage to v2.53.2 ([#1608](https://github.com/googleapis/java-storage-nio/issues/1608)) ([b365a55](https://github.com/googleapis/java-storage-nio/commit/b365a55d4dcbf7f5b9fe52a8578952fa66baeb90))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.2 ([#1607](https://github.com/googleapis/java-storage-nio/issues/1607)) ([1c371e7](https://github.com/googleapis/java-storage-nio/commit/1c371e721053980795cc8655be1241c1d0e9792a))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.0 ([#1611](https://github.com/googleapis/java-storage-nio/issues/1611)) ([18959ca](https://github.com/googleapis/java-storage-nio/commit/18959ca3f50cd838a7d4e4a1a174d4fc0b472bc6))
+
+## [0.127.37](https://github.com/googleapis/java-storage-nio/compare/v0.127.36...v0.127.37) (2025-06-04)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250521-2.0.0 ([#1596](https://github.com/googleapis/java-storage-nio/issues/1596)) ([4a08c52](https://github.com/googleapis/java-storage-nio/commit/4a08c5290aaf8430ed86093b9eb7fac38b5fb681))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250524-2.0.0 ([#1598](https://github.com/googleapis/java-storage-nio/issues/1598)) ([c3af63f](https://github.com/googleapis/java-storage-nio/commit/c3af63f95e0ff65a33ce15ced5ce027e91f12025))
+* Update dependency com.google.cloud:google-cloud-storage to v2.53.0 ([#1600](https://github.com/googleapis/java-storage-nio/issues/1600)) ([d6fea9e](https://github.com/googleapis/java-storage-nio/commit/d6fea9e88e5cbe72aa900bb6994303c0adf5604c))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.0 ([#1599](https://github.com/googleapis/java-storage-nio/issues/1599)) ([87fb221](https://github.com/googleapis/java-storage-nio/commit/87fb2210465de19b5626fc69431eceefa4738c5e))
+
+## [0.127.36](https://github.com/googleapis/java-storage-nio/compare/v0.127.35...v0.127.36) (2025-05-19)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250509-2.0.0 ([#1590](https://github.com/googleapis/java-storage-nio/issues/1590)) ([c339845](https://github.com/googleapis/java-storage-nio/commit/c3398452201f6d12f1b74cb4071482980888e7d8))
+* Update dependency com.google.cloud:google-cloud-storage to v2.52.3 ([#1592](https://github.com/googleapis/java-storage-nio/issues/1592)) ([7273afe](https://github.com/googleapis/java-storage-nio/commit/7273afe803cbdbba6a3ee3126e8393f746be73ea))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.48.0 ([#1589](https://github.com/googleapis/java-storage-nio/issues/1589)) ([b15e10f](https://github.com/googleapis/java-storage-nio/commit/b15e10fcad77628f3f1240b6198dc8de5791d998))
+
+## [0.127.35](https://github.com/googleapis/java-storage-nio/compare/v0.127.34...v0.127.35) (2025-05-06)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250424-2.0.0 ([#1580](https://github.com/googleapis/java-storage-nio/issues/1580)) ([e01241a](https://github.com/googleapis/java-storage-nio/commit/e01241a18c703c60fa194f1ca61711aa56c40e7f))
+* Update dependency com.google.cloud:google-cloud-storage to v2.52.2 ([#1584](https://github.com/googleapis/java-storage-nio/issues/1584)) ([5f62a77](https://github.com/googleapis/java-storage-nio/commit/5f62a779e0079567e31db0d2fcc566fd110a4b55))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.47.0 ([#1583](https://github.com/googleapis/java-storage-nio/issues/1583)) ([7dc52c4](https://github.com/googleapis/java-storage-nio/commit/7dc52c47a7960de1fa8a23078a38d15164c553f4))
+
+## [0.127.34](https://github.com/googleapis/java-storage-nio/compare/v0.127.33...v0.127.34) (2025-04-24)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250312-2.0.0 ([#1561](https://github.com/googleapis/java-storage-nio/issues/1561)) ([ff7d9df](https://github.com/googleapis/java-storage-nio/commit/ff7d9dfc168fa12798434675a59b28d992eddad3))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250416-2.0.0 ([#1575](https://github.com/googleapis/java-storage-nio/issues/1575)) ([b900a09](https://github.com/googleapis/java-storage-nio/commit/b900a096380e06a5b3f5ca9ca41f4e88a99d7b18))
+* Update dependency com.google.cloud:google-cloud-storage to v2.51.0 ([#1576](https://github.com/googleapis/java-storage-nio/issues/1576)) ([2ff82dd](https://github.com/googleapis/java-storage-nio/commit/2ff82dd285d923dcc3530c376f6d7e8a602aace0))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.0 ([#1572](https://github.com/googleapis/java-storage-nio/issues/1572)) ([01ae240](https://github.com/googleapis/java-storage-nio/commit/01ae24029abaeaeab7b3d625bf64e076c4fde9f3))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.1 ([#1573](https://github.com/googleapis/java-storage-nio/issues/1573)) ([9d87790](https://github.com/googleapis/java-storage-nio/commit/9d87790a48fc240d51895b8d437ba012b7e6e8c6))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.2 ([#1574](https://github.com/googleapis/java-storage-nio/issues/1574)) ([4c4e91d](https://github.com/googleapis/java-storage-nio/commit/4c4e91d6923723e961421a9767630a31ab0a5912))
+* Update dependency com.google.guava:guava to v33.4.5-android ([#1563](https://github.com/googleapis/java-storage-nio/issues/1563)) ([211e5e8](https://github.com/googleapis/java-storage-nio/commit/211e5e88e00293b72e355ed54d2e4917708bc7d3))
+* Update dependency com.google.guava:guava to v33.4.6-android ([#1566](https://github.com/googleapis/java-storage-nio/issues/1566)) ([38ef153](https://github.com/googleapis/java-storage-nio/commit/38ef15378468fd979cd49eeb4a2c65f1e6f3f07e))
+* Update dependency com.google.guava:guava to v33.4.8-android ([#1570](https://github.com/googleapis/java-storage-nio/issues/1570)) ([47b9ad4](https://github.com/googleapis/java-storage-nio/commit/47b9ad4f3413bb0a5a6d95e659497ae5f542cdc3))
+
+## [0.127.33](https://github.com/googleapis/java-storage-nio/compare/v0.127.32...v0.127.33) (2025-03-14)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20250224-2.0.0 ([#1549](https://github.com/googleapis/java-storage-nio/issues/1549)) ([7eb41df](https://github.com/googleapis/java-storage-nio/commit/7eb41df58095ac33bac0b648dc80733e3e2143ca))
+* Update dependency com.google.cloud:google-cloud-storage to v2.50.0 ([#1556](https://github.com/googleapis/java-storage-nio/issues/1556)) ([80f3bd9](https://github.com/googleapis/java-storage-nio/commit/80f3bd9bb5b25c1ae599963b3a0192110cebe2b8))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.45.0 ([#1554](https://github.com/googleapis/java-storage-nio/issues/1554)) ([cdd06f9](https://github.com/googleapis/java-storage-nio/commit/cdd06f9689ebd4b7bf44b54a4319983884f7ad03))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.45.1 ([#1555](https://github.com/googleapis/java-storage-nio/issues/1555)) ([97c3624](https://github.com/googleapis/java-storage-nio/commit/97c3624ac7e375621d78c7eea10b00359d7971fd))
+* Update dependency node to v22 ([#1553](https://github.com/googleapis/java-storage-nio/issues/1553)) ([f4c4920](https://github.com/googleapis/java-storage-nio/commit/f4c4920c6ccdd32969a4ea1cfe004b2537ba2021))
+
+## [0.127.32](https://github.com/googleapis/java-storage-nio/compare/v0.127.31...v0.127.32) (2025-02-26)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.49.0 ([#1545](https://github.com/googleapis/java-storage-nio/issues/1545)) ([09af40c](https://github.com/googleapis/java-storage-nio/commit/09af40cc2b1d359341e1dab137eabc404b35a821))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.44.0 ([#1542](https://github.com/googleapis/java-storage-nio/issues/1542)) ([a659c23](https://github.com/googleapis/java-storage-nio/commit/a659c23225d3c4326f3de916a9a63c31ae86b59b))
+
+## [0.127.31](https://github.com/googleapis/java-storage-nio/compare/v0.127.30...v0.127.31) (2025-02-13)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.48.1 ([#1533](https://github.com/googleapis/java-storage-nio/issues/1533)) ([f6b9472](https://github.com/googleapis/java-storage-nio/commit/f6b9472fb1970a0ad5865f4d95b9f97c9102fd6d))
+* Update dependency com.google.cloud:google-cloud-storage to v2.48.2 ([#1537](https://github.com/googleapis/java-storage-nio/issues/1537)) ([74b2803](https://github.com/googleapis/java-storage-nio/commit/74b2803e3270ada80c004cdd86fe42c47b9b8d3d))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.43.0 ([#1536](https://github.com/googleapis/java-storage-nio/issues/1536)) ([d024538](https://github.com/googleapis/java-storage-nio/commit/d0245387989f1c371f7545807ef030df1c21c67b))
+
+## [0.127.30](https://github.com/googleapis/java-storage-nio/compare/v0.127.29...v0.127.30) (2025-01-28)
+
+
+### Bug Fixes
+
+* Update FakeStorageRpc to be able to handle incremental resumable upload puts ([#1527](https://github.com/googleapis/java-storage-nio/issues/1527)) ([5ca338e](https://github.com/googleapis/java-storage-nio/commit/5ca338e24fe9fb180b34948c14e216b32bc9a4c9))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.48.0 ([#1528](https://github.com/googleapis/java-storage-nio/issues/1528)) ([b1ee43a](https://github.com/googleapis/java-storage-nio/commit/b1ee43aa29604bdea88ca491af5b5e30e2d4a2d8))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.42.0 ([#1529](https://github.com/googleapis/java-storage-nio/issues/1529)) ([006259b](https://github.com/googleapis/java-storage-nio/commit/006259b4ef962d5683d8b1f092aab8cb9d513273))
+
+## [0.127.29](https://github.com/googleapis/java-storage-nio/compare/v0.127.28...v0.127.29) (2025-01-08)
+
+
+### Bug Fixes
+
+* Minimize initialize at buildtime ([#1465](https://github.com/googleapis/java-storage-nio/issues/1465)) ([fbc842d](https://github.com/googleapis/java-storage-nio/commit/fbc842d42ab3d3f0bf5168e9273edff50bf5a8e0))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.47.0 ([#1522](https://github.com/googleapis/java-storage-nio/issues/1522)) ([133ab80](https://github.com/googleapis/java-storage-nio/commit/133ab803e720359fd0024464517f53483946546e))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.1 ([#1521](https://github.com/googleapis/java-storage-nio/issues/1521)) ([7ce2a91](https://github.com/googleapis/java-storage-nio/commit/7ce2a91ecc460df5c84e194ad3f49c42f54b05ff))
+* Update dependency com.google.guava:guava to v33.4.0-android ([#1519](https://github.com/googleapis/java-storage-nio/issues/1519)) ([c496bc6](https://github.com/googleapis/java-storage-nio/commit/c496bc657f0fc1ef93754d0df7df1518cafdc3d6))
+
+## [0.127.28](https://github.com/googleapis/java-storage-nio/compare/v0.127.27...v0.127.28) (2024-12-13)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20241206-2.0.0 ([#1512](https://github.com/googleapis/java-storage-nio/issues/1512)) ([ef94ecb](https://github.com/googleapis/java-storage-nio/commit/ef94ecb85fcd326da3449202a84a0ba9129045b2))
+* Update dependency com.google.cloud:google-cloud-storage to v2.46.0 ([#1514](https://github.com/googleapis/java-storage-nio/issues/1514)) ([63f1a16](https://github.com/googleapis/java-storage-nio/commit/63f1a16e0277bf78f5ebd4de6ab0c4c586ac192d))
+
+## [0.127.27](https://github.com/googleapis/java-storage-nio/compare/v0.127.26...v0.127.27) (2024-11-19)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20241113-2.0.0 ([#1506](https://github.com/googleapis/java-storage-nio/issues/1506)) ([8400c67](https://github.com/googleapis/java-storage-nio/commit/8400c674938adddf4d5156f136a3ee00771ba151))
+* Update dependency com.google.cloud:google-cloud-storage to v2.45.0 ([#1505](https://github.com/googleapis/java-storage-nio/issues/1505)) ([623c960](https://github.com/googleapis/java-storage-nio/commit/623c9600c1b027e9e39c592860d26a8466fe0eba))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.40.0 ([#1504](https://github.com/googleapis/java-storage-nio/issues/1504)) ([461583f](https://github.com/googleapis/java-storage-nio/commit/461583fab0f7aa8792a8162e5fb026b1ce5d3fd3))
+
+## [0.127.26](https://github.com/googleapis/java-storage-nio/compare/v0.127.25...v0.127.26) (2024-10-29)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20241008-2.0.0 ([#1491](https://github.com/googleapis/java-storage-nio/issues/1491)) ([110796b](https://github.com/googleapis/java-storage-nio/commit/110796b7485daefcb5509388954a1efa74fb0c76))
+* Update dependency com.google.cloud:google-cloud-storage to v2.44.0 ([#1495](https://github.com/googleapis/java-storage-nio/issues/1495)) ([5042da0](https://github.com/googleapis/java-storage-nio/commit/5042da072103a4718ca6e091017950d76fdde41d))
+* Update dependency com.google.cloud:google-cloud-storage to v2.44.1 ([#1498](https://github.com/googleapis/java-storage-nio/issues/1498)) ([7354b85](https://github.com/googleapis/java-storage-nio/commit/7354b850fe881f6906a38f466146363c5374b8a7))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.38.0 ([#1493](https://github.com/googleapis/java-storage-nio/issues/1493)) ([67fed77](https://github.com/googleapis/java-storage-nio/commit/67fed7703b4cd24cb44b94287458f6f0377b29d6))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.39.0 ([#1497](https://github.com/googleapis/java-storage-nio/issues/1497)) ([f207c0e](https://github.com/googleapis/java-storage-nio/commit/f207c0e78ddfd50e31aaf1fa5ef58033138762cc))
+
+## [0.127.25](https://github.com/googleapis/java-storage-nio/compare/v0.127.24...v0.127.25) (2024-10-09)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.37.0 ([#1484](https://github.com/googleapis/java-storage-nio/issues/1484)) ([5281b99](https://github.com/googleapis/java-storage-nio/commit/5281b99bbec8d72c5cc7657aece2cefd786bb973))
+* Update dependency org.ow2.asm:asm to v9.7.1 ([#1485](https://github.com/googleapis/java-storage-nio/issues/1485)) ([dd8d9f6](https://github.com/googleapis/java-storage-nio/commit/dd8d9f6cbca5c374d5abd7a37de669db6e69008a))
+* Update dependency org.ow2.asm:asm-commons to v9.7.1 ([#1486](https://github.com/googleapis/java-storage-nio/issues/1486)) ([0001634](https://github.com/googleapis/java-storage-nio/commit/00016341bbd3277d0271e08165fdb5fbb87b7cc1))
+
+## [0.127.24](https://github.com/googleapis/java-storage-nio/compare/v0.127.23...v0.127.24) (2024-09-30)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240916-2.0.0 ([#1473](https://github.com/googleapis/java-storage-nio/issues/1473)) ([e66ad2d](https://github.com/googleapis/java-storage-nio/commit/e66ad2d94f4d282ef48fdef1312dc1a0444b91b9))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240924-2.0.0 ([#1478](https://github.com/googleapis/java-storage-nio/issues/1478)) ([a382594](https://github.com/googleapis/java-storage-nio/commit/a38259400cc46ab3154a2d5c4db9fc0aa98ce4fd))
+* Update dependency com.google.cloud:google-cloud-storage to v2.43.1 ([#1476](https://github.com/googleapis/java-storage-nio/issues/1476)) ([21b832c](https://github.com/googleapis/java-storage-nio/commit/21b832ce178190b0ef71aec67dd7af4157651ded))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.1 ([#1474](https://github.com/googleapis/java-storage-nio/issues/1474)) ([e7f8d41](https://github.com/googleapis/java-storage-nio/commit/e7f8d41ba3f3820a4012407cc7983deda8f5d6da))
+* Update dependency com.google.guava:guava to v33.3.1-android ([#1475](https://github.com/googleapis/java-storage-nio/issues/1475)) ([b3453fe](https://github.com/googleapis/java-storage-nio/commit/b3453fe43d3c6d14d986527f20c68f86f22034cb))
+* Update dependency ubuntu to v24 ([#1477](https://github.com/googleapis/java-storage-nio/issues/1477)) ([2b5b871](https://github.com/googleapis/java-storage-nio/commit/2b5b871bda84eab953b0fe0c6f3b5e398c9fa111))
+
+## [0.127.23](https://github.com/googleapis/java-storage-nio/compare/v0.127.22...v0.127.23) (2024-09-17)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240819-2.0.0 ([#1460](https://github.com/googleapis/java-storage-nio/issues/1460)) ([bf6cfdc](https://github.com/googleapis/java-storage-nio/commit/bf6cfdcc59faf668ceb82b6cb81f62267f2fe2c9))
+* Update dependency com.google.cloud:google-cloud-storage to v2.43.0 ([#1468](https://github.com/googleapis/java-storage-nio/issues/1468)) ([4e2963c](https://github.com/googleapis/java-storage-nio/commit/4e2963cd3ad0b11d145658f61db9edf261efc2f3))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.35.0 ([#1466](https://github.com/googleapis/java-storage-nio/issues/1466)) ([6fe3708](https://github.com/googleapis/java-storage-nio/commit/6fe3708536986b4beb157d6f41fcb3cc6897edb7))
+
+## [0.127.22](https://github.com/googleapis/java-storage-nio/compare/v0.127.21...v0.127.22) (2024-08-19)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240809-2.0.0 ([#1451](https://github.com/googleapis/java-storage-nio/issues/1451)) ([117bee9](https://github.com/googleapis/java-storage-nio/commit/117bee90559d97e84df7933227bdbccc47cb2dc4))
+* Update dependency com.google.cloud:google-cloud-storage to v2.42.0 ([#1457](https://github.com/googleapis/java-storage-nio/issues/1457)) ([416fc23](https://github.com/googleapis/java-storage-nio/commit/416fc234e06ef6c42f0ecfdd51004537d9fb29ed))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.34.0 ([#1454](https://github.com/googleapis/java-storage-nio/issues/1454)) ([01f4a81](https://github.com/googleapis/java-storage-nio/commit/01f4a810dda11b27be35cc8b03bad7f427a1abf2))
+* Update dependency com.google.guava:guava to v33.3.0-android ([#1455](https://github.com/googleapis/java-storage-nio/issues/1455)) ([8dce385](https://github.com/googleapis/java-storage-nio/commit/8dce385ffd4577c0424f5d54d91f5f980cc83972))
+
+## [0.127.21](https://github.com/googleapis/java-storage-nio/compare/v0.127.20...v0.127.21) (2024-08-05)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240625-2.0.0 ([#1433](https://github.com/googleapis/java-storage-nio/issues/1433)) ([e7dba8b](https://github.com/googleapis/java-storage-nio/commit/e7dba8ba31fb0616afd366da7976291cda5897e0))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240706-2.0.0 ([#1438](https://github.com/googleapis/java-storage-nio/issues/1438)) ([ac99294](https://github.com/googleapis/java-storage-nio/commit/ac99294b518047e35e12ad83850d0d37ca9fc937))
+* Update dependency com.google.cloud:google-cloud-storage to v2.41.0 ([#1441](https://github.com/googleapis/java-storage-nio/issues/1441)) ([11dca80](https://github.com/googleapis/java-storage-nio/commit/11dca80b94d1ea9d8a1c008a4c0dd66bfe83f3ef))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.33.0 ([#1440](https://github.com/googleapis/java-storage-nio/issues/1440)) ([0055ee0](https://github.com/googleapis/java-storage-nio/commit/0055ee08973b6b1330b2ca2c79e031f895035fe7))
+
+## [0.127.20](https://github.com/googleapis/java-storage-nio/compare/v0.127.19...v0.127.20) (2024-06-27)
+
+
+### Bug Fixes
+
+* Update CloudStorageFileSystemProvider#getFileAttributeView to return null rather than throw UnsupportedOperationException ([#1427](https://github.com/googleapis/java-storage-nio/issues/1427)) ([b9e0362](https://github.com/googleapis/java-storage-nio/commit/b9e03621af8c9a24a45ec288cc974719b3bf63d9))
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240524-2.0.0 ([#1410](https://github.com/googleapis/java-storage-nio/issues/1410)) ([011a78f](https://github.com/googleapis/java-storage-nio/commit/011a78f6c0b2dfb51169d1e690a33c4ddde57615))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240621-2.0.0 ([#1425](https://github.com/googleapis/java-storage-nio/issues/1425)) ([2cc3efc](https://github.com/googleapis/java-storage-nio/commit/2cc3efc8a7f17caf4916c7a6ca6803627c26164d))
+* Update dependency com.google.cloud:google-cloud-storage to v2.40.1 ([#1429](https://github.com/googleapis/java-storage-nio/issues/1429)) ([cbeadb8](https://github.com/googleapis/java-storage-nio/commit/cbeadb87b2b24d5a1e6eff1613845fa94c39efa0))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.32.0 ([#1426](https://github.com/googleapis/java-storage-nio/issues/1426)) ([3a4bb4f](https://github.com/googleapis/java-storage-nio/commit/3a4bb4f100f46625e5ca9c43902d6220b0a6617b))
+
+## [0.127.19](https://github.com/googleapis/java-storage-nio/compare/v0.127.18...v0.127.19) (2024-06-11)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.40.0 ([#1417](https://github.com/googleapis/java-storage-nio/issues/1417)) ([aba4f07](https://github.com/googleapis/java-storage-nio/commit/aba4f072b66a06fa4c36da048a28d51d32a806bd))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.31.0 ([#1414](https://github.com/googleapis/java-storage-nio/issues/1414)) ([53b46f8](https://github.com/googleapis/java-storage-nio/commit/53b46f8c98c2f40dab7ee4f6d7a2d95a480400ff))
+* Update dependency com.google.guava:guava to v33.2.1-android ([#1413](https://github.com/googleapis/java-storage-nio/issues/1413)) ([3fba0cf](https://github.com/googleapis/java-storage-nio/commit/3fba0cff64a9c74e3ffbec9792255898efe1954d))
+
+## [0.127.18](https://github.com/googleapis/java-storage-nio/compare/v0.127.17...v0.127.18) (2024-05-23)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.39.0 ([#1406](https://github.com/googleapis/java-storage-nio/issues/1406)) ([c240857](https://github.com/googleapis/java-storage-nio/commit/c24085763cc46f340c716d5a520ada9ab1f90f00))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.1 ([#1403](https://github.com/googleapis/java-storage-nio/issues/1403)) ([3723265](https://github.com/googleapis/java-storage-nio/commit/37232653b5cb597f478d78a4b5d89defc4ba4ae0))
+
+## [0.127.17](https://github.com/googleapis/java-storage-nio/compare/v0.127.16...v0.127.17) (2024-05-09)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.38.0 ([#1397](https://github.com/googleapis/java-storage-nio/issues/1397)) ([85ee286](https://github.com/googleapis/java-storage-nio/commit/85ee2868ff885fa8c5d1a2f2bd27cec800f83b1e))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.0 ([#1396](https://github.com/googleapis/java-storage-nio/issues/1396)) ([19df4c5](https://github.com/googleapis/java-storage-nio/commit/19df4c56045b71cec71b4eb6bc7b008e1bb4a79d))
+* Update dependency com.google.guava:guava to v33.2.0-android ([#1395](https://github.com/googleapis/java-storage-nio/issues/1395)) ([4cae062](https://github.com/googleapis/java-storage-nio/commit/4cae062b288534be2b9a24044235543f9446e742))
+
+## [0.127.16](https://github.com/googleapis/java-storage-nio/compare/v0.127.15...v0.127.16) (2024-04-19)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240319-2.0.0 ([#1381](https://github.com/googleapis/java-storage-nio/issues/1381)) ([203aca7](https://github.com/googleapis/java-storage-nio/commit/203aca783bf3cf54c64bda5ccffbbcb94de51325))
+* Update dependency com.google.cloud:google-cloud-storage to v2.37.0 ([#1387](https://github.com/googleapis/java-storage-nio/issues/1387)) ([ed6f938](https://github.com/googleapis/java-storage-nio/commit/ed6f938601ccb818e1fe9a2bcfb354961f09081b))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.29.0 ([#1386](https://github.com/googleapis/java-storage-nio/issues/1386)) ([ee05692](https://github.com/googleapis/java-storage-nio/commit/ee05692d0a3dbca9445678180290b72c336cdbb9))
+* Update dependency com.google.guava:guava to v33.1.0-android ([#1375](https://github.com/googleapis/java-storage-nio/issues/1375)) ([a5c86a9](https://github.com/googleapis/java-storage-nio/commit/a5c86a9f13941f87492ed8a9b273268adca2f84f))
+
+## [0.127.15](https://github.com/googleapis/java-storage-nio/compare/v0.127.14...v0.127.15) (2024-03-28)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240311-2.0.0 ([#1374](https://github.com/googleapis/java-storage-nio/issues/1374)) ([528fc3a](https://github.com/googleapis/java-storage-nio/commit/528fc3a91d51e250db027bc84d91b5468ec115cb))
+* Update dependency com.google.cloud:google-cloud-storage to v2.36.1 ([#1377](https://github.com/googleapis/java-storage-nio/issues/1377)) ([1e16a57](https://github.com/googleapis/java-storage-nio/commit/1e16a57dfe1d911605af2fbb1ff4b628a7924171))
+* Update dependency org.ow2.asm:asm to v9.7 ([#1378](https://github.com/googleapis/java-storage-nio/issues/1378)) ([9b6221c](https://github.com/googleapis/java-storage-nio/commit/9b6221cdaaa5725b17f0ad17e4aca9a7d6087ad8))
+* Update dependency org.ow2.asm:asm-commons to v9.7 ([#1379](https://github.com/googleapis/java-storage-nio/issues/1379)) ([81f4517](https://github.com/googleapis/java-storage-nio/commit/81f45173c5ea7943b99945756a94d20b20061a1e))
+
+## [0.127.14](https://github.com/googleapis/java-storage-nio/compare/v0.127.13...v0.127.14) (2024-03-05)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.35.0 ([#1369](https://github.com/googleapis/java-storage-nio/issues/1369)) ([86bc7d1](https://github.com/googleapis/java-storage-nio/commit/86bc7d1c3c2aab455e9c30f8edc36dac09cd1940))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.27.0 ([#1367](https://github.com/googleapis/java-storage-nio/issues/1367)) ([7c25d11](https://github.com/googleapis/java-storage-nio/commit/7c25d1179452f62c63c9f16a31abdcf88e4fd27b))
+* Update dependency com.google.guava:guava to v33 ([#1322](https://github.com/googleapis/java-storage-nio/issues/1322)) ([40b66ce](https://github.com/googleapis/java-storage-nio/commit/40b66ceaa3e1973fbb5a2206da0a0fa242956afe))
+
+## [0.127.13](https://github.com/googleapis/java-storage-nio/compare/v0.127.12...v0.127.13) (2024-02-14)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240209-2.0.0 ([#1354](https://github.com/googleapis/java-storage-nio/issues/1354)) ([b194d35](https://github.com/googleapis/java-storage-nio/commit/b194d357cb4b23fe010741c07e5671bb545ffae8))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.25.0 ([#1356](https://github.com/googleapis/java-storage-nio/issues/1356)) ([2dc2886](https://github.com/googleapis/java-storage-nio/commit/2dc2886e8266184ea0be29083c3f586d813a6d40))
+* Update dependency com.google.cloud:google-cloud-storage to v2.34.0 ([#1359](https://github.com/googleapis/java-storage-nio/issues/1359)) ([41d9dfa](https://github.com/googleapis/java-storage-nio/commit/41d9dfaca7b5909f3c6a82f7e02e4e7573d8d266))
+
+## [0.127.12](https://github.com/googleapis/java-storage-nio/compare/v0.127.11...v0.127.12) (2024-02-08)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240202-2.0.0 ([#1347](https://github.com/googleapis/java-storage-nio/issues/1347)) ([9b15436](https://github.com/googleapis/java-storage-nio/commit/9b154360529732f60bee717b87868173b482c8b8))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240205-2.0.0 ([#1350](https://github.com/googleapis/java-storage-nio/issues/1350)) ([cb6546b](https://github.com/googleapis/java-storage-nio/commit/cb6546b32c7a464d3d2c8849f7774a7a818dc5cd))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.24.0 ([#1345](https://github.com/googleapis/java-storage-nio/issues/1345)) ([9f80180](https://github.com/googleapis/java-storage-nio/commit/9f8018020bf3cebe1e1a507c19123ebbf74bca7d))
+* Update dependency com.google.cloud:google-cloud-storage to v2.33.0 ([#1349](https://github.com/googleapis/java-storage-nio/issues/1349)) ([6b96ad2](https://github.com/googleapis/java-storage-nio/commit/6b96ad2bae91a57b9655e2f4ca40c776103e4769))
+
+## [0.127.11](https://github.com/googleapis/java-storage-nio/compare/v0.127.10...v0.127.11) (2024-01-25)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.23.0 ([#1339](https://github.com/googleapis/java-storage-nio/issues/1339)) ([46685dd](https://github.com/googleapis/java-storage-nio/commit/46685dd704dca859331e4856dc7ba9433a4cc794))
+* Update dependency com.google.cloud:google-cloud-storage to v2.32.1 ([#1341](https://github.com/googleapis/java-storage-nio/issues/1341)) ([05347f7](https://github.com/googleapis/java-storage-nio/commit/05347f759f2f130d37c4c1c9f6c41331e25ef761))
+
+## [0.127.10](https://github.com/googleapis/java-storage-nio/compare/v0.127.9...v0.127.10) (2024-01-22)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.22.0 ([#1331](https://github.com/googleapis/java-storage-nio/issues/1331)) ([af36d28](https://github.com/googleapis/java-storage-nio/commit/af36d284bb8c3c36476e065460db6928d4482187))
+* Update dependency com.google.cloud:google-cloud-storage to v2.32.0 ([#1335](https://github.com/googleapis/java-storage-nio/issues/1335)) ([54b07be](https://github.com/googleapis/java-storage-nio/commit/54b07beee25a333fdd3a70fb573b701bc2ed19e1))
+
+## [0.127.9](https://github.com/googleapis/java-storage-nio/compare/v0.127.8...v0.127.9) (2024-01-11)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20240105-2.0.0 ([#1325](https://github.com/googleapis/java-storage-nio/issues/1325)) ([f6a4925](https://github.com/googleapis/java-storage-nio/commit/f6a49253cb4eaba4e076eb2557a64b12543486f2))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.21.0 ([#1324](https://github.com/googleapis/java-storage-nio/issues/1324)) ([5c07d98](https://github.com/googleapis/java-storage-nio/commit/5c07d988c799ec80538fc08122da8f7f6b74e3cf))
+* Update dependency com.google.cloud:google-cloud-storage to v2.31.0 ([#1326](https://github.com/googleapis/java-storage-nio/issues/1326)) ([ae3e4a1](https://github.com/googleapis/java-storage-nio/commit/ae3e4a100cca6ab834dc3240e4a2ecc86b2d9642))
+
+## [0.127.8](https://github.com/googleapis/java-storage-nio/compare/v0.127.7...v0.127.8) (2023-12-06)
+
+
+### Bug Fixes
+
+* Update FakeStorageRpc to better handle resumable sessions that overwrite existing objects ([#1296](https://github.com/googleapis/java-storage-nio/issues/1296)) ([8051cae](https://github.com/googleapis/java-storage-nio/commit/8051cae055815c882d46167b2c878157c1aa776b))
+
+
+### Dependencies
+
+* Update actions/github-script action to v7 ([#1299](https://github.com/googleapis/java-storage-nio/issues/1299)) ([670cc7a](https://github.com/googleapis/java-storage-nio/commit/670cc7a0677cb4f2e5614f536ad211a981579a0e))
+* Update actions/github-script action to v7 ([#1311](https://github.com/googleapis/java-storage-nio/issues/1311)) ([8cba471](https://github.com/googleapis/java-storage-nio/commit/8cba471ecbb1f18a0cc1a1c21ec98acde7ea68cb))
+* Update actions/setup-java action to v4 ([#1301](https://github.com/googleapis/java-storage-nio/issues/1301)) ([042c51c](https://github.com/googleapis/java-storage-nio/commit/042c51c692fbb42eee6dea24a950ace7aee59f7e))
+* Update actions/setup-java action to v4 ([#1312](https://github.com/googleapis/java-storage-nio/issues/1312)) ([f286d00](https://github.com/googleapis/java-storage-nio/commit/f286d00d5e22c15dff361524aef3337479ea1000))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20231117-2.0.0 ([#1303](https://github.com/googleapis/java-storage-nio/issues/1303)) ([20d0e9c](https://github.com/googleapis/java-storage-nio/commit/20d0e9cb4ab25ce8fe78cb94b5dc380a102f1bd1))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.20.0 ([#1302](https://github.com/googleapis/java-storage-nio/issues/1302)) ([5f3d552](https://github.com/googleapis/java-storage-nio/commit/5f3d552111b332a706189d61e2c17763047c3a03))
+* Update dependency com.google.cloud:google-cloud-storage to v2.30.1 ([#1306](https://github.com/googleapis/java-storage-nio/issues/1306)) ([7a29cdb](https://github.com/googleapis/java-storage-nio/commit/7a29cdb129337c7e39829d45e35ef4dd20b015bd))
+* Update dependency com.google.guava:guava to v32.1.3-android ([#1298](https://github.com/googleapis/java-storage-nio/issues/1298)) ([0f24b83](https://github.com/googleapis/java-storage-nio/commit/0f24b83c7cc55527e8db077866646b50fade8fd5))
+* Update the dependency com.google.apis:google-api-services-stora… ([#1314](https://github.com/googleapis/java-storage-nio/issues/1314)) ([b3fb38d](https://github.com/googleapis/java-storage-nio/commit/b3fb38d1b80c471b8c7c6498150942bd638541cd))
+
+## [0.127.7](https://github.com/googleapis/java-storage-nio/compare/v0.127.6...v0.127.7) (2023-11-03)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20231028-2.0.0 ([#1288](https://github.com/googleapis/java-storage-nio/issues/1288)) ([97e9fcb](https://github.com/googleapis/java-storage-nio/commit/97e9fcbfbe6b6010d5eb2738b80949aa28c88e24))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.19.0 ([#1292](https://github.com/googleapis/java-storage-nio/issues/1292)) ([b4c5543](https://github.com/googleapis/java-storage-nio/commit/b4c554367ae7dacb1bb5c5a65615247fcfd63295))
+* Update dependency com.google.cloud:google-cloud-storage to v2.29.1 ([#1293](https://github.com/googleapis/java-storage-nio/issues/1293)) ([a1f9322](https://github.com/googleapis/java-storage-nio/commit/a1f93224326633ca9a23280bd820e9062c2874da))
+
+## [0.127.6](https://github.com/googleapis/java-storage-nio/compare/v0.127.5...v0.127.6) (2023-10-23)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20231012-2.0.0 ([#1279](https://github.com/googleapis/java-storage-nio/issues/1279)) ([de065f1](https://github.com/googleapis/java-storage-nio/commit/de065f1174dc67bb873f074ec82f30ca4ff30811))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.18.0 ([#1283](https://github.com/googleapis/java-storage-nio/issues/1283)) ([a33eb8e](https://github.com/googleapis/java-storage-nio/commit/a33eb8ebd4e5c0e358c866a000c5dcdb53aa665b))
+* Update dependency com.google.cloud:google-cloud-storage to v2.29.0 ([#1284](https://github.com/googleapis/java-storage-nio/issues/1284)) ([72db89d](https://github.com/googleapis/java-storage-nio/commit/72db89d92e2a18b3b67dfd6dc254c03524780b1f))
+
+## [0.127.5](https://github.com/googleapis/java-storage-nio/compare/v0.127.4...v0.127.5) (2023-10-12)
+
+
+### Bug Fixes
+
+* Add protection against a possible null dereference issue ([#1258](https://github.com/googleapis/java-storage-nio/issues/1258)) ([ade173b](https://github.com/googleapis/java-storage-nio/commit/ade173bdc762d0fe8ac97a5e189f6802156231a7))
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230926-2.0.0 ([#1266](https://github.com/googleapis/java-storage-nio/issues/1266)) ([1cf28cb](https://github.com/googleapis/java-storage-nio/commit/1cf28cb0b86914a1a8ad9e46f31d9372796de038))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.17.0 ([#1272](https://github.com/googleapis/java-storage-nio/issues/1272)) ([876c4b5](https://github.com/googleapis/java-storage-nio/commit/876c4b531f86f0b5af01cb850a9e7116c7b1e181))
+* Update dependency com.google.cloud:google-cloud-storage to v2.28.0 ([#1275](https://github.com/googleapis/java-storage-nio/issues/1275)) ([cc93df1](https://github.com/googleapis/java-storage-nio/commit/cc93df1cda79fb3faf5dc786df01bb1b8fc2897a))
+* Update dependency org.ow2.asm:asm to v9.6 ([#1268](https://github.com/googleapis/java-storage-nio/issues/1268)) ([b216dc9](https://github.com/googleapis/java-storage-nio/commit/b216dc9606297ff430f234d922a44161175daf41))
+* Update dependency org.ow2.asm:asm-commons to v9.6 ([#1267](https://github.com/googleapis/java-storage-nio/issues/1267)) ([bfa0f30](https://github.com/googleapis/java-storage-nio/commit/bfa0f3022065c2e3c071b98c4be37c63548e97fc))
+
+## [0.127.4](https://github.com/googleapis/java-storage-nio/compare/v0.127.3...v0.127.4) (2023-09-26)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230914-2.0.0 ([#1254](https://github.com/googleapis/java-storage-nio/issues/1254)) ([efe45f0](https://github.com/googleapis/java-storage-nio/commit/efe45f029dcbf318f36f5681ad10935bfcdc2808))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230922-2.0.0 ([#1259](https://github.com/googleapis/java-storage-nio/issues/1259)) ([80a7dbb](https://github.com/googleapis/java-storage-nio/commit/80a7dbbbaf523d5771d161e9df43415cee990b6d))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.16.0 ([#1257](https://github.com/googleapis/java-storage-nio/issues/1257)) ([7f6d165](https://github.com/googleapis/java-storage-nio/commit/7f6d165e04c3e3bde0416b05d06076493806c1ac))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.16.1 ([#1261](https://github.com/googleapis/java-storage-nio/issues/1261)) ([69f15c0](https://github.com/googleapis/java-storage-nio/commit/69f15c004c96fef4337d9dae30258a38fa29cad3))
+* Update dependency com.google.cloud:google-cloud-storage to v2.27.1 ([#1263](https://github.com/googleapis/java-storage-nio/issues/1263)) ([b559148](https://github.com/googleapis/java-storage-nio/commit/b559148c1e084446c31a10731bfe6810ac8b5245))
+
+## [0.127.3](https://github.com/googleapis/java-storage-nio/compare/v0.127.2...v0.127.3) (2023-09-13)
+
+
+### Dependencies
+
+* Update actions/checkout action to v4 ([#1245](https://github.com/googleapis/java-storage-nio/issues/1245)) ([9d0a175](https://github.com/googleapis/java-storage-nio/commit/9d0a17581020058a35c592dce895a7e601faf584))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230710-2.0.0 ([#1238](https://github.com/googleapis/java-storage-nio/issues/1238)) ([51b12aa](https://github.com/googleapis/java-storage-nio/commit/51b12aa6044407220f8461e92c673607406fd719))
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230907-2.0.0 ([#1249](https://github.com/googleapis/java-storage-nio/issues/1249)) ([d362b23](https://github.com/googleapis/java-storage-nio/commit/d362b230aae976ab2ff1eb92da67f34da38fe183))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.15.0 ([#1248](https://github.com/googleapis/java-storage-nio/issues/1248)) ([173db6b](https://github.com/googleapis/java-storage-nio/commit/173db6b6f5dd83a0c25e43f28fe8bf6a28c73c9a))
+* Update dependency com.google.cloud:google-cloud-storage to v2.26.1 ([#1239](https://github.com/googleapis/java-storage-nio/issues/1239)) ([2a0866a](https://github.com/googleapis/java-storage-nio/commit/2a0866adc21f0df5370d20f942a47c5f7cd57496))
+* Update dependency com.google.cloud:google-cloud-storage to v2.27.0 ([#1250](https://github.com/googleapis/java-storage-nio/issues/1250)) ([cd51778](https://github.com/googleapis/java-storage-nio/commit/cd51778387c2635df29fabb445be19505492c9d2))
+
+## [0.127.2](https://github.com/googleapis/java-storage-nio/compare/v0.127.1...v0.127.2) (2023-08-17)
+
+
+### Bug Fixes
+
+* Add precondition to delete operations ([#1240](https://github.com/googleapis/java-storage-nio/issues/1240)) ([57c65c6](https://github.com/googleapis/java-storage-nio/commit/57c65c6a90106e1de384ac38d8b16cce1730894a))
+
+## [0.127.1](https://github.com/googleapis/java-storage-nio/compare/v0.127.0...v0.127.1) (2023-08-08)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.14.0 ([#1231](https://github.com/googleapis/java-storage-nio/issues/1231)) ([021480d](https://github.com/googleapis/java-storage-nio/commit/021480d13c7254bf3834327cf1251557b20dbbfb))
+* Update dependency com.google.cloud:google-cloud-storage to v2.26.0 ([#1233](https://github.com/googleapis/java-storage-nio/issues/1233)) ([7ecc6a7](https://github.com/googleapis/java-storage-nio/commit/7ecc6a721d1ee3b5ecbb62c5cdccdb6e471bba02))
+
+## [0.127.0](https://github.com/googleapis/java-storage-nio/compare/v0.126.19...v0.127.0) (2023-07-26)
+
+
+### Features
+
+* Store bucket name in URI authority ([#1218](https://github.com/googleapis/java-storage-nio/issues/1218)) ([#1219](https://github.com/googleapis/java-storage-nio/issues/1219)) ([99179e8](https://github.com/googleapis/java-storage-nio/commit/99179e822421e5280040f7baa95ada91b52c9f04))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.13.1 ([#1223](https://github.com/googleapis/java-storage-nio/issues/1223)) ([7f5921d](https://github.com/googleapis/java-storage-nio/commit/7f5921d185a2bc5876be8511d80716c982de9c16))
+* Update dependency com.google.cloud:google-cloud-storage to v2.25.0 ([#1215](https://github.com/googleapis/java-storage-nio/issues/1215)) ([1fe262d](https://github.com/googleapis/java-storage-nio/commit/1fe262d683a6a6976bbb3ab34f5fcafb1d158a7e))
+
+## [0.126.19](https://github.com/googleapis/java-storage-nio/compare/v0.126.18...v0.126.19) (2023-07-10)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.13.0 ([#1213](https://github.com/googleapis/java-storage-nio/issues/1213)) ([dff430b](https://github.com/googleapis/java-storage-nio/commit/dff430bc27da1f0ba890c28806762269a5fd6eee))
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.6 ([#1208](https://github.com/googleapis/java-storage-nio/issues/1208)) ([002c776](https://github.com/googleapis/java-storage-nio/commit/002c776fb04ab284c1495a2e99f68c28792f2e7a))
+
+## [0.126.18](https://github.com/googleapis/java-storage-nio/compare/v0.126.17...v0.126.18) (2023-06-22)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230617-2.0.0 ([#1202](https://github.com/googleapis/java-storage-nio/issues/1202)) ([9f7b1bb](https://github.com/googleapis/java-storage-nio/commit/9f7b1bba58f63cdfc42f42b1f219f65dbcc8d310))
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.5 ([#1205](https://github.com/googleapis/java-storage-nio/issues/1205)) ([4127953](https://github.com/googleapis/java-storage-nio/commit/412795338eda33cccddd71620cd94894e6fd0b5a))
+
+## [0.126.17](https://github.com/googleapis/java-storage-nio/compare/v0.126.16...v0.126.17) (2023-06-08)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.11.0 ([#1191](https://github.com/googleapis/java-storage-nio/issues/1191)) ([db3cf28](https://github.com/googleapis/java-storage-nio/commit/db3cf2898027be6169fb109b4d64866f24d74fb4))
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.4 ([#1193](https://github.com/googleapis/java-storage-nio/issues/1193)) ([6018385](https://github.com/googleapis/java-storage-nio/commit/6018385114a0e190026a19826a8ff85d994c40c3))
+
+## [0.126.16](https://github.com/googleapis/java-storage-nio/compare/v0.126.15...v0.126.16) (2023-05-30)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.10.1 ([#1181](https://github.com/googleapis/java-storage-nio/issues/1181)) ([8a441b9](https://github.com/googleapis/java-storage-nio/commit/8a441b9728e9d1e85e544e9a048415a8c72cab29))
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.3 ([#1183](https://github.com/googleapis/java-storage-nio/issues/1183)) ([454f4dc](https://github.com/googleapis/java-storage-nio/commit/454f4dc3bb1821dc26119cc39ae90c9dd1500f07))
+
+## [0.126.15](https://github.com/googleapis/java-storage-nio/compare/v0.126.14...v0.126.15) (2023-05-10)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.9.0 ([#1171](https://github.com/googleapis/java-storage-nio/issues/1171)) ([8eff3ba](https://github.com/googleapis/java-storage-nio/commit/8eff3ba700dcfb0f775faaf40cf415cbac51ed56))
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.2 ([#1174](https://github.com/googleapis/java-storage-nio/issues/1174)) ([7e4a794](https://github.com/googleapis/java-storage-nio/commit/7e4a794a5dff00f7d4edd5f72f848ef719c37c9c))
+
+## [0.126.14](https://github.com/googleapis/java-storage-nio/compare/v0.126.13...v0.126.14) (2023-04-26)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.8.0 ([#1164](https://github.com/googleapis/java-storage-nio/issues/1164)) ([66370be](https://github.com/googleapis/java-storage-nio/commit/66370bea5caf6067f12a78b34dffe6c3926ff788))
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.1 ([#1166](https://github.com/googleapis/java-storage-nio/issues/1166)) ([adde354](https://github.com/googleapis/java-storage-nio/commit/adde3540871437a32a0d5cde4041b4e5ac4f2717))
+
+## [0.126.13](https://github.com/googleapis/java-storage-nio/compare/v0.126.12...v0.126.13) (2023-04-13)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.22.0 ([#1158](https://github.com/googleapis/java-storage-nio/issues/1158)) ([2b9d909](https://github.com/googleapis/java-storage-nio/commit/2b9d9091b781bf62d498193966665c88a660c07a))
+
+## [0.126.12](https://github.com/googleapis/java-storage-nio/compare/v0.126.11...v0.126.12) (2023-04-12)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.7.0 ([#1154](https://github.com/googleapis/java-storage-nio/issues/1154)) ([1e1590d](https://github.com/googleapis/java-storage-nio/commit/1e1590de0dee2d2d2dc995978460d1dedec30799))
+
+## [0.126.11](https://github.com/googleapis/java-storage-nio/compare/v0.126.10...v0.126.11) (2023-04-04)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.6.0 ([#1147](https://github.com/googleapis/java-storage-nio/issues/1147)) ([a650f7b](https://github.com/googleapis/java-storage-nio/commit/a650f7be397440a107e672fc94c87cfdbc626b33))
+* Update dependency com.google.cloud:google-cloud-storage to v2.21.0 ([#1149](https://github.com/googleapis/java-storage-nio/issues/1149)) ([61f1c2c](https://github.com/googleapis/java-storage-nio/commit/61f1c2ceb224f207a114f75700ee8c268d806c4a))
+
+## [0.126.10](https://github.com/googleapis/java-storage-nio/compare/v0.126.9...v0.126.10) (2023-03-23)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.5.0 ([#1140](https://github.com/googleapis/java-storage-nio/issues/1140)) ([c6db426](https://github.com/googleapis/java-storage-nio/commit/c6db4262f3d45dc39f39ccf2d33c4e63f0bd5477))
+* Update dependency com.google.cloud:google-cloud-storage to v2.20.2 ([#1142](https://github.com/googleapis/java-storage-nio/issues/1142)) ([c56b30c](https://github.com/googleapis/java-storage-nio/commit/c56b30cc83bf54dc6dd4eed7837c0ca500fde16a))
+
+## [0.126.9](https://github.com/googleapis/java-storage-nio/compare/v0.126.8...v0.126.9) (2023-03-16)
+
+
+### Dependencies
+
+* Update dependency com.google.apis:google-api-services-storage to v1-rev20230301-2.0.0 ([#1136](https://github.com/googleapis/java-storage-nio/issues/1136)) ([7defd38](https://github.com/googleapis/java-storage-nio/commit/7defd387cf453f8dcdc8e0cbb037bfaa07658442))
+
+## [0.126.8](https://github.com/googleapis/java-storage-nio/compare/v0.126.7...v0.126.8) (2023-03-07)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.20.0 ([#1130](https://github.com/googleapis/java-storage-nio/issues/1130)) ([56b056f](https://github.com/googleapis/java-storage-nio/commit/56b056f28325919d2bd2cfe9f0b5f0ab943ad5f3))
+* Update dependency com.google.cloud:google-cloud-storage to v2.20.1 ([#1132](https://github.com/googleapis/java-storage-nio/issues/1132)) ([7fa62ae](https://github.com/googleapis/java-storage-nio/commit/7fa62ae19721118d5b76a1c0724b5646b6c8f510))
+
+## [0.126.7](https://github.com/googleapis/java-storage-nio/compare/v0.126.6...v0.126.7) (2023-03-06)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.4.0 ([#1126](https://github.com/googleapis/java-storage-nio/issues/1126)) ([ace0b31](https://github.com/googleapis/java-storage-nio/commit/ace0b31ed68fd8e7e55ebbca3f3fc0e70aaccb3d))
+
+## [0.126.6](https://github.com/googleapis/java-storage-nio/compare/v0.126.5...v0.126.6) (2023-02-21)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.19.0 ([#1118](https://github.com/googleapis/java-storage-nio/issues/1118)) ([ce48ec5](https://github.com/googleapis/java-storage-nio/commit/ce48ec510471507467fbabab2ee3eab5962f2570))
+
+## [0.126.5](https://github.com/googleapis/java-storage-nio/compare/v0.126.4...v0.126.5) (2023-02-21)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.3.0 ([#1114](https://github.com/googleapis/java-storage-nio/issues/1114)) ([83d3586](https://github.com/googleapis/java-storage-nio/commit/83d3586c503b3c54e341d1cde79ae356aab48fcf))
+
+## [0.126.4](https://github.com/googleapis/java-storage-nio/compare/v0.126.3...v0.126.4) (2023-02-07)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.2.0 ([#1104](https://github.com/googleapis/java-storage-nio/issues/1104)) ([068e0cb](https://github.com/googleapis/java-storage-nio/commit/068e0cbf6fb32de40d4a1baa04c88697584431c4))
+* Update dependency com.google.cloud:google-cloud-storage to v2.18.0 ([#1106](https://github.com/googleapis/java-storage-nio/issues/1106)) ([92e13eb](https://github.com/googleapis/java-storage-nio/commit/92e13ebb6e21f1810bf081cf5c3cecd9c0148aa8))
+
+## [0.126.3](https://github.com/googleapis/java-storage-nio/compare/v0.126.2...v0.126.3) (2023-01-23)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.17.2 ([#1098](https://github.com/googleapis/java-storage-nio/issues/1098)) ([43acd0d](https://github.com/googleapis/java-storage-nio/commit/43acd0d6feb453b0eb81cd631a2957cfa12563a2))
+
+## [0.126.2](https://github.com/googleapis/java-storage-nio/compare/v0.126.1...v0.126.2) (2023-01-20)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.2 ([#1094](https://github.com/googleapis/java-storage-nio/issues/1094)) ([dc43479](https://github.com/googleapis/java-storage-nio/commit/dc43479a4396b8d2dfa59888279f6f0d0f581bdf))
+
+## [0.126.1](https://github.com/googleapis/java-storage-nio/compare/v0.126.0...v0.126.1) (2023-01-13)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.1 ([#1082](https://github.com/googleapis/java-storage-nio/issues/1082)) ([e42f097](https://github.com/googleapis/java-storage-nio/commit/e42f097ae9f95e2eda794dc298dcd6c33abc40d8))
+* Update dependency com.google.cloud:google-cloud-storage to v2.17.1 ([#1086](https://github.com/googleapis/java-storage-nio/issues/1086)) ([28b525d](https://github.com/googleapis/java-storage-nio/commit/28b525d9b58ff468f56133f49d83bfb8de2651b1))
+
+## [0.126.0](https://github.com/googleapis/java-storage-nio/compare/v0.125.0...v0.126.0) (2022-12-09)
+
+
+### Features
+
+* FileSystemProvider::readAttributes faked posix support ([#1067](https://github.com/googleapis/java-storage-nio/issues/1067)) ([b813ccc](https://github.com/googleapis/java-storage-nio/commit/b813ccc87ecff40f56fccf2ce981f16422c190f1))
+
+## [0.125.0](https://github.com/googleapis/java-storage-nio/compare/v0.124.21...v0.125.0) (2022-12-07)
+
+
+### Features
+
+* FileSystemProvider::readAttributes for basic and gcs views ([#1066](https://github.com/googleapis/java-storage-nio/issues/1066)) ([2f13792](https://github.com/googleapis/java-storage-nio/commit/2f13792040302899b6d7db00aa9c673dd470d460))
+
+
+### Bug Fixes
+
+* FileSystemProvider::checkAccess fails on '/' with StorageException ([d287cf5](https://github.com/googleapis/java-storage-nio/commit/d287cf5a9292221db251c987ff3a3ec736a815ac))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.0 ([#1070](https://github.com/googleapis/java-storage-nio/issues/1070)) ([a6e55e7](https://github.com/googleapis/java-storage-nio/commit/a6e55e77d06eba990b81400e4973a9a4098175cb))
+* Update dependency com.google.cloud:google-cloud-storage to v2.16.0 ([#1071](https://github.com/googleapis/java-storage-nio/issues/1071)) ([882e06b](https://github.com/googleapis/java-storage-nio/commit/882e06b13630259bd5254e8b4f10b6ab9dddbf84))
+
+## [0.124.21](https://github.com/googleapis/java-storage-nio/compare/v0.124.20...v0.124.21) (2022-11-18)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.15.1 ([#1057](https://github.com/googleapis/java-storage-nio/issues/1057)) ([88b1aac](https://github.com/googleapis/java-storage-nio/commit/88b1aace911f8b2187b5cba246ea13a143bad7ad))
+
+## [0.124.20](https://github.com/googleapis/java-storage-nio/compare/v0.124.19...v0.124.20) (2022-11-09)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.6 ([#1049](https://github.com/googleapis/java-storage-nio/issues/1049)) ([44270ca](https://github.com/googleapis/java-storage-nio/commit/44270cada9438ac105134713b81fb0005649f0cd))
+* Update dependency com.google.cloud:google-cloud-storage to v2.15.0 ([#1050](https://github.com/googleapis/java-storage-nio/issues/1050)) ([23a7cfa](https://github.com/googleapis/java-storage-nio/commit/23a7cfa4308be2f20355f7aaa605725d13c8eb44))
+
+## [0.124.19](https://github.com/googleapis/java-storage-nio/compare/v0.124.18...v0.124.19) (2022-10-26)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.14.0 ([#1039](https://github.com/googleapis/java-storage-nio/issues/1039)) ([26ef9be](https://github.com/googleapis/java-storage-nio/commit/26ef9beee22a380a810ab6a6b9f2e3e67b03fd40))
+
+## [0.124.18](https://github.com/googleapis/java-storage-nio/compare/v0.124.17...v0.124.18) (2022-10-21)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.5 ([#1031](https://github.com/googleapis/java-storage-nio/issues/1031)) ([00e8b8d](https://github.com/googleapis/java-storage-nio/commit/00e8b8d5fa19d858fc888233295804653d90bd4e))
+* Update dependency com.google.cloud:google-cloud-storage to v2.13.1 ([#1032](https://github.com/googleapis/java-storage-nio/issues/1032)) ([91cda8d](https://github.com/googleapis/java-storage-nio/commit/91cda8d672ee374cee9bcd09be704f5bcd0354d1))
+
+## [0.124.17](https://github.com/googleapis/java-storage-nio/compare/v0.124.16...v0.124.17) (2022-10-07)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-storage to v2.13.0 ([#1024](https://github.com/googleapis/java-storage-nio/issues/1024)) ([98aba70](https://github.com/googleapis/java-storage-nio/commit/98aba7052ce506400c326867bf1c4e4e01e92790))
+
+## [0.124.16](https://github.com/googleapis/java-storage-nio/compare/v0.124.15...v0.124.16) (2022-10-03)
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.4 ([#1020](https://github.com/googleapis/java-storage-nio/issues/1020)) ([fb8115e](https://github.com/googleapis/java-storage-nio/commit/fb8115e6583c437fdb26e59c75258c4325f63598))
+
+## [0.124.15](https://github.com/googleapis/java-storage-nio/compare/v0.124.14...v0.124.15) (2022-09-15)
+
+
+### Documentation
+
+* Update documentation to be clearer on pseudo-directory pitfalls ([#980](https://github.com/googleapis/java-storage-nio/issues/980)) ([5f6ac74](https://github.com/googleapis/java-storage-nio/commit/5f6ac74cc50c819b5871a1a1d0b86e865801caec))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.2 ([#987](https://github.com/googleapis/java-storage-nio/issues/987)) ([d7061e0](https://github.com/googleapis/java-storage-nio/commit/d7061e03a7cf02138dc7ddfc13d3da6d77e301fd))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.3 ([#990](https://github.com/googleapis/java-storage-nio/issues/990)) ([44bb128](https://github.com/googleapis/java-storage-nio/commit/44bb12894f8459ad34c9ed314e4c75b5277f3496))
+* Update dependency com.google.cloud:google-cloud-storage to v2.12.0 ([#991](https://github.com/googleapis/java-storage-nio/issues/991)) ([b5b565f](https://github.com/googleapis/java-storage-nio/commit/b5b565f284ce2fcde66ee1d0e90d984b6aa6e703))
+
+## [0.124.14](https://github.com/googleapis/java-storage-nio/compare/v0.124.13...v0.124.14) (2022-08-08)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.11.3 ([#977](https://github.com/googleapis/java-storage-nio/issues/977)) ([f044437](https://github.com/googleapis/java-storage-nio/commit/f044437af7e1ce07183ceb18b90a50e2c13c8498))
+
+## [0.124.13](https://github.com/googleapis/java-storage-nio/compare/v0.124.12...v0.124.13) (2022-08-05)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.11.2 ([#973](https://github.com/googleapis/java-storage-nio/issues/973)) ([ab3cd7f](https://github.com/googleapis/java-storage-nio/commit/ab3cd7f6756899072cc6f54df98cb25d12e9835c))
+
+## [0.124.12](https://github.com/googleapis/java-storage-nio/compare/v0.124.11...v0.124.12) (2022-08-04)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.11.1 ([#969](https://github.com/googleapis/java-storage-nio/issues/969)) ([abe838f](https://github.com/googleapis/java-storage-nio/commit/abe838f8c334c07bc22a12665c14b490cbde7a8b))
+
+## [0.124.11](https://github.com/googleapis/java-storage-nio/compare/v0.124.10...v0.124.11) (2022-08-03)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v3 ([#963](https://github.com/googleapis/java-storage-nio/issues/963)) ([0794f54](https://github.com/googleapis/java-storage-nio/commit/0794f54070c4303298b4879f346eacbb7ba12826))
+
+## [0.124.10](https://github.com/googleapis/java-storage-nio/compare/v0.124.9...v0.124.10) (2022-07-21)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.10.0 ([#955](https://github.com/googleapis/java-storage-nio/issues/955)) ([967a6da](https://github.com/googleapis/java-storage-nio/commit/967a6da8296096db0b1061556e8e19265ad21ec3))
+
+## [0.124.9](https://github.com/googleapis/java-storage-nio/compare/v0.124.8...v0.124.9) (2022-07-13)
+
+
+### Bug Fixes
+
+* enable longpaths support for windows test ([#1485](https://github.com/googleapis/java-storage-nio/issues/1485)) ([#951](https://github.com/googleapis/java-storage-nio/issues/951)) ([aa3f827](https://github.com/googleapis/java-storage-nio/commit/aa3f827744f97d03de46ea18a122ac10fbb2d900))
+
+## [0.124.8](https://github.com/googleapis/java-storage-nio/compare/v0.124.7...v0.124.8) (2022-07-11)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20220705-1.32.1 ([#946](https://github.com/googleapis/java-storage-nio/issues/946)) ([513c21e](https://github.com/googleapis/java-storage-nio/commit/513c21e7f8337da26c7dfd8a47d059af872f6aeb))
+* update dependency com.google.cloud:google-cloud-storage to v2.9.3 ([#945](https://github.com/googleapis/java-storage-nio/issues/945)) ([39e7451](https://github.com/googleapis/java-storage-nio/commit/39e7451712aa2e754cb28c47dcc77de81273ad54))
+
+## [0.124.7](https://github.com/googleapis/java-storage-nio/compare/v0.124.6...v0.124.7) (2022-06-29)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.9.0 ([#939](https://github.com/googleapis/java-storage-nio/issues/939)) ([ae5d294](https://github.com/googleapis/java-storage-nio/commit/ae5d294253a1e6aa43c0fbd6ea765acd24d43645))
+
+## [0.124.6](https://github.com/googleapis/java-storage-nio/compare/v0.124.5...v0.124.6) (2022-06-23)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.13.0 ([#933](https://github.com/googleapis/java-storage-nio/issues/933)) ([d3f032c](https://github.com/googleapis/java-storage-nio/commit/d3f032cdab59ee1a23987975d3b79025ea5c4f41))
+
+## [0.124.5](https://github.com/googleapis/java-storage-nio/compare/v0.124.4...v0.124.5) (2022-06-13)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20220608-1.32.1 ([#928](https://github.com/googleapis/java-storage-nio/issues/928)) ([a5cc78e](https://github.com/googleapis/java-storage-nio/commit/a5cc78e8e33204477baa9facfd59a89b9edf8ed7))
+* update dependency com.google.cloud:google-cloud-storage to v2.8.1 ([#930](https://github.com/googleapis/java-storage-nio/issues/930)) ([458b29f](https://github.com/googleapis/java-storage-nio/commit/458b29f31ee911a7131ac7c5eac84eb9e5cb0014))
+
+## [0.124.4](https://github.com/googleapis/java-storage-nio/compare/v0.124.3...v0.124.4) (2022-06-09)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.8.0 ([#923](https://github.com/googleapis/java-storage-nio/issues/923)) ([f3ae73e](https://github.com/googleapis/java-storage-nio/commit/f3ae73edc6474493ff36ccbcfa0744aa8f8a9a26))
+
+## [0.124.3](https://github.com/googleapis/java-storage-nio/compare/v0.124.2...v0.124.3) (2022-06-08)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20220604-1.32.1 ([#919](https://github.com/googleapis/java-storage-nio/issues/919)) ([262784d](https://github.com/googleapis/java-storage-nio/commit/262784df98b011a9712d46c12630a55bb66fdc59))
+
+### [0.124.2](https://github.com/googleapis/java-storage-nio/compare/v0.124.1...v0.124.2) (2022-05-27)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.7.2 ([#912](https://github.com/googleapis/java-storage-nio/issues/912)) ([768e8c8](https://github.com/googleapis/java-storage-nio/commit/768e8c8e31fbd994c9349a031c13feb7d95da200))
+
+### [0.124.1](https://github.com/googleapis/java-storage-nio/compare/v0.124.0...v0.124.1) (2022-05-25)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.7.1 ([#906](https://github.com/googleapis/java-storage-nio/issues/906)) ([f38d419](https://github.com/googleapis/java-storage-nio/commit/f38d4198488a65b3cc8aecca148c02b5aafc62c8))
+
+## [0.124.0](https://github.com/googleapis/java-storage-nio/compare/v0.123.28...v0.124.0) (2022-05-24)
+
+
+### Features
+
+* add build scripts for native image testing in Java 17 ([#1440](https://github.com/googleapis/java-storage-nio/issues/1440)) ([#902](https://github.com/googleapis/java-storage-nio/issues/902)) ([a21ed71](https://github.com/googleapis/java-storage-nio/commit/a21ed71257853b2a1c7549c36fd0dda8ef806b82))
+
+
+### Bug Fixes
+
+* **build:** revert maven-shade-plugin 3.3.0 ([533c6dd](https://github.com/googleapis/java-storage-nio/commit/533c6dd510327bff310fbd6ddb2ceb72b2afcbce))
+* check generation for nullability before incrementing it ([#888](https://github.com/googleapis/java-storage-nio/issues/888)) ([cadf081](https://github.com/googleapis/java-storage-nio/commit/cadf081c4ba35b33307c38cddd08959b142edf23))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20220509-1.32.1 ([#899](https://github.com/googleapis/java-storage-nio/issues/899)) ([52d2969](https://github.com/googleapis/java-storage-nio/commit/52d2969e1089072a86ac4f458c93932adfbf89d9))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.11.0 ([#901](https://github.com/googleapis/java-storage-nio/issues/901)) ([847afcb](https://github.com/googleapis/java-storage-nio/commit/847afcbe6c0e6d214677f2d408e429aaf330bf6d))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.12.0 ([#903](https://github.com/googleapis/java-storage-nio/issues/903)) ([d11b6c5](https://github.com/googleapis/java-storage-nio/commit/d11b6c5dc8b500d705c230ac712571a44bbf2df7))
+* update dependency com.google.cloud:google-cloud-storage to v2.7.0 ([#904](https://github.com/googleapis/java-storage-nio/issues/904)) ([6ef8605](https://github.com/googleapis/java-storage-nio/commit/6ef8605590f4ab835e3adfce2e602bcf2fe4376c))
+
+### [0.123.28](https://github.com/googleapis/java-storage-nio/compare/v0.123.27...v0.123.28) (2022-04-18)
+
+
+### Bug Fixes
+
+* **native:** initialize classes at build-time to fix Native Image compilation ([#874](https://github.com/googleapis/java-storage-nio/issues/874)) ([df905cb](https://github.com/googleapis/java-storage-nio/commit/df905cbb615f2a6f57d45397423556357b23fa38))
+* **test:** replace HashMap with ConcurrentHashMap to avoid ConcurrentModificatio… ([#883](https://github.com/googleapis/java-storage-nio/issues/883)) ([d2fe2a0](https://github.com/googleapis/java-storage-nio/commit/d2fe2a09de6881ce6ce949c8e99bec7825c5c833))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20220401-1.32.1 ([#881](https://github.com/googleapis/java-storage-nio/issues/881)) ([a598199](https://github.com/googleapis/java-storage-nio/commit/a598199247e5d29712aeba0b709ce9f37e641154))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#884](https://github.com/googleapis/java-storage-nio/issues/884)) ([c08f115](https://github.com/googleapis/java-storage-nio/commit/c08f11569e4337127960b69a315f255ef08a035a))
+* update dependency com.google.cloud:google-cloud-storage to v2.6.0 ([#878](https://github.com/googleapis/java-storage-nio/issues/878)) ([0bd1985](https://github.com/googleapis/java-storage-nio/commit/0bd19858569d4181be49e60525d9ad5736b9e1ab))
+* update dependency com.google.cloud:google-cloud-storage to v2.6.1 ([#885](https://github.com/googleapis/java-storage-nio/issues/885)) ([cf24525](https://github.com/googleapis/java-storage-nio/commit/cf24525d52ea45da50e5152041d25d6ad6246cfc))
+
+### [0.123.27](https://github.com/googleapis/java-storage-nio/compare/v0.123.26...v0.123.27) (2022-03-29)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.9.0 ([#873](https://github.com/googleapis/java-storage-nio/issues/873)) ([485cf03](https://github.com/googleapis/java-storage-nio/commit/485cf032c981a1a11792710107bca9814eafefc5))
+* update dependency com.google.cloud:google-cloud-storage to v2.5.1 ([#872](https://github.com/googleapis/java-storage-nio/issues/872)) ([5a6a664](https://github.com/googleapis/java-storage-nio/commit/5a6a664c1c818e5f9232bc00b3f068dfcbb608b1))
+
+### [0.123.26](https://github.com/googleapis/java-storage-nio/compare/v0.123.25...v0.123.26) (2022-03-28)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.5.0 ([#868](https://github.com/googleapis/java-storage-nio/issues/868)) ([9be5945](https://github.com/googleapis/java-storage-nio/commit/9be594506f95d911a54ab56eca068f8f0b49798b))
+
+### [0.123.25](https://github.com/googleapis/java-storage-nio/compare/v0.123.24...v0.123.25) (2022-03-17)
+
+
+### Bug Fixes
+
+* prevent crash when checking if a missing file exists [#856](https://github.com/googleapis/java-storage-nio/issues/856) ([#858](https://github.com/googleapis/java-storage-nio/issues/858)) ([d6b7b5e](https://github.com/googleapis/java-storage-nio/commit/d6b7b5e5e7ca243583e8852edfcf83d57021c9e6))
+* Prevent NPE when bucket doesn't exist [#857](https://github.com/googleapis/java-storage-nio/issues/857) ([#860](https://github.com/googleapis/java-storage-nio/issues/860)) ([69cab9e](https://github.com/googleapis/java-storage-nio/commit/69cab9ef10072bbf504f5afe0817937bb38aef11))
+
+### [0.123.24](https://github.com/googleapis/java-storage-nio/compare/v0.123.23...v0.123.24) (2022-03-09)
+
+
+### Bug Fixes
+
+* prevent NPE when checking requester pays status ([#850](https://github.com/googleapis/java-storage-nio/issues/850)) ([ce50209](https://github.com/googleapis/java-storage-nio/commit/ce502094f0d983e136a60569424992acbd126041))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.4.5 ([#852](https://github.com/googleapis/java-storage-nio/issues/852)) ([0163189](https://github.com/googleapis/java-storage-nio/commit/01631891d1f6477d9021b57d097d0d6fbcccab1e))
+
+### [0.123.23](https://github.com/googleapis/java-storage-nio/compare/v0.123.22...v0.123.23) (2022-03-04)
+
+
+### Bug Fixes
+
+* Requester pays to check reason and fallback to error message validation ([#841](https://github.com/googleapis/java-storage-nio/issues/841)) ([9f30db3](https://github.com/googleapis/java-storage-nio/commit/9f30db3ccca16121fc5260334d603f8d272af2d9))
+
+### [0.123.22](https://github.com/googleapis/java-storage-nio/compare/v0.123.21...v0.123.22) (2022-03-02)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#835](https://github.com/googleapis/java-storage-nio/issues/835)) ([55a7cd7](https://github.com/googleapis/java-storage-nio/commit/55a7cd745d76a5d6781cf5a1f0432447cf8eb94b))
+
+### [0.123.21](https://github.com/googleapis/java-storage-nio/compare/v0.123.20...v0.123.21) (2022-03-01)
+
+
+### Bug Fixes
+
+* change CloudStorageFileSystemProvider to throw a FileAlreadyExistsException if copy receives a 412 ([#815](https://github.com/googleapis/java-storage-nio/issues/815)) ([33889c3](https://github.com/googleapis/java-storage-nio/commit/33889c352d1a0fcebe4613615907f01fbca04186))
+
+
+### Dependencies
+
+* update actions/github-script action to v6 ([#818](https://github.com/googleapis/java-storage-nio/issues/818)) ([59c9baf](https://github.com/googleapis/java-storage-nio/commit/59c9baf28ceda12d0926124d137f792e940c153e))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20220210-1.32.1 ([#823](https://github.com/googleapis/java-storage-nio/issues/823)) ([6c94667](https://github.com/googleapis/java-storage-nio/commit/6c946674931d6f5e88bba7cc93bfb1849480ce0d))
+* update dependency com.google.cloud:google-cloud-storage to v2.4.1 ([#817](https://github.com/googleapis/java-storage-nio/issues/817)) ([2ebe674](https://github.com/googleapis/java-storage-nio/commit/2ebe67495be0b2e71eed4a5c0d6aed5954c32593))
+* update dependency com.google.cloud:google-cloud-storage to v2.4.2 ([#820](https://github.com/googleapis/java-storage-nio/issues/820)) ([397ee84](https://github.com/googleapis/java-storage-nio/commit/397ee84b7530607665c725eb8392d12429f6b6a7))
+* update dependency com.google.cloud:google-cloud-storage to v2.4.4 ([#830](https://github.com/googleapis/java-storage-nio/issues/830)) ([2b3f88f](https://github.com/googleapis/java-storage-nio/commit/2b3f88f967f7fcf0a1475dae5dfc74f3e3f0cb6c))
+* update dependency com.google.guava:guava to v31.1-android ([#829](https://github.com/googleapis/java-storage-nio/issues/829)) ([70c1983](https://github.com/googleapis/java-storage-nio/commit/70c198347c8709d1302915bddda49d2402566ea7))
+
+### [0.123.20](https://github.com/googleapis/java-storage-nio/compare/v0.123.19...v0.123.20) (2022-02-08)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.4.0 ([#806](https://github.com/googleapis/java-storage-nio/issues/806)) ([4849120](https://github.com/googleapis/java-storage-nio/commit/484912059a54926cba4cfc5149d70fd8f2bc5ba8))
+
+### [0.123.19](https://github.com/googleapis/java-storage-nio/compare/v0.123.18...v0.123.19) (2022-02-03)
+
+
+### Dependencies
+
+* **java:** update actions/github-script action to v5 ([#1339](https://github.com/googleapis/java-storage-nio/issues/1339)) ([#800](https://github.com/googleapis/java-storage-nio/issues/800)) ([4c82c37](https://github.com/googleapis/java-storage-nio/commit/4c82c37860af4e0ae43e31446e35b6b3bae7ebbb))
+* update actions/github-script action to v5 ([#799](https://github.com/googleapis/java-storage-nio/issues/799)) ([40febb2](https://github.com/googleapis/java-storage-nio/commit/40febb21b20c414c7e9443e95245e469cdafef76))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.7.0 ([#802](https://github.com/googleapis/java-storage-nio/issues/802)) ([2beefb6](https://github.com/googleapis/java-storage-nio/commit/2beefb699619f72f2a3d50cd0d63140d15d08a0b))
+* update dependency com.google.cloud:google-cloud-storage to v2.2.3 ([#786](https://github.com/googleapis/java-storage-nio/issues/786)) ([b82657c](https://github.com/googleapis/java-storage-nio/commit/b82657ca045dee5e3a73f89a8f087cd957fb370f))
+* update dependency com.google.cloud:google-cloud-storage to v2.3.0 ([#796](https://github.com/googleapis/java-storage-nio/issues/796)) ([e822be5](https://github.com/googleapis/java-storage-nio/commit/e822be5c411420c79ead2276904126b8e3ad022f))
+
+### [0.123.18](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.17...v0.123.18) (2022-01-07)
+
+
+### Bug Fixes
+
+* add nio entry to user-agent ([#774](https://www.github.com/googleapis/java-storage-nio/issues/774)) ([2d30f78](https://www.github.com/googleapis/java-storage-nio/commit/2d30f789e475afe8d2b0cd70bba05f3cbf105caf))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.6.0 ([#783](https://www.github.com/googleapis/java-storage-nio/issues/783)) ([55f2e8d](https://www.github.com/googleapis/java-storage-nio/commit/55f2e8d0c49d506261e3839003b4dd652e6301fc))
+
+### [0.123.17](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.16...v0.123.17) (2021-12-06)
+
+
+### Bug Fixes
+
+* **java:** java 17 dependency arguments ([#1266](https://www.github.com/googleapis/java-storage-nio/issues/1266)) ([#750](https://www.github.com/googleapis/java-storage-nio/issues/750)) ([3f866da](https://www.github.com/googleapis/java-storage-nio/commit/3f866da0aa3b381477c883b4f11239640c577d88))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20211018-1.32.1 ([#749](https://www.github.com/googleapis/java-storage-nio/issues/749)) ([7e99920](https://www.github.com/googleapis/java-storage-nio/commit/7e99920cfeef90ad5af5503a63338c48a57cb674))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20211201-1.32.1 ([#768](https://www.github.com/googleapis/java-storage-nio/issues/768)) ([650d9b5](https://www.github.com/googleapis/java-storage-nio/commit/650d9b5d76869f31d0456f9f3a9c01c9e9ae6ef9))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.0 ([#759](https://www.github.com/googleapis/java-storage-nio/issues/759)) ([7cb3292](https://www.github.com/googleapis/java-storage-nio/commit/7cb32926da5f910e3636d12a1ad412b4e3531b05))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.1 ([#767](https://www.github.com/googleapis/java-storage-nio/issues/767)) ([7eb3dfa](https://www.github.com/googleapis/java-storage-nio/commit/7eb3dfab9644f48f0063fb1be4f9805062b2eae8))
+* update dependency com.google.cloud:google-cloud-storage to v2.2.0 ([#753](https://www.github.com/googleapis/java-storage-nio/issues/753)) ([fcbc986](https://www.github.com/googleapis/java-storage-nio/commit/fcbc986c020ab48412218ab3825c2423a90d70d4))
+* update dependency com.google.cloud:google-cloud-storage to v2.2.1 ([#760](https://www.github.com/googleapis/java-storage-nio/issues/760)) ([33fffbf](https://www.github.com/googleapis/java-storage-nio/commit/33fffbf3d79335b36e78af95e0f26cb9ec5f5f4e))
+* update dependency com.google.cloud:google-cloud-storage to v2.2.2 ([#769](https://www.github.com/googleapis/java-storage-nio/issues/769)) ([4f48a96](https://www.github.com/googleapis/java-storage-nio/commit/4f48a96feb32a43c590a286d8c622b2ba845b8f2))
+
+### [0.123.16](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.15...v0.123.16) (2021-10-21)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.4.0 ([#744](https://www.github.com/googleapis/java-storage-nio/issues/744)) ([5a3ac26](https://www.github.com/googleapis/java-storage-nio/commit/5a3ac269778ecfd237714d42803f27957b02c96d))
+* update dependency com.google.cloud:google-cloud-storage to v2.1.9 ([#743](https://www.github.com/googleapis/java-storage-nio/issues/743)) ([261d18b](https://www.github.com/googleapis/java-storage-nio/commit/261d18b885a03bb748f06b19eb5b19a4dbbf0d55))
+
+### [0.123.15](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.14...v0.123.15) (2021-10-05)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.1.7 ([#735](https://www.github.com/googleapis/java-storage-nio/issues/735)) ([536e238](https://www.github.com/googleapis/java-storage-nio/commit/536e238267d0435138bb48390e97886e293d5d7f))
+
+### [0.123.14](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.13...v0.123.14) (2021-10-01)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20210918-1.32.1 ([#721](https://www.github.com/googleapis/java-storage-nio/issues/721)) ([d0f8fc0](https://www.github.com/googleapis/java-storage-nio/commit/d0f8fc01ece5020306b46af8e85c94f8762f148a))
+* update dependency com.google.cloud:google-cloud-storage to v2.1.6 ([#722](https://www.github.com/googleapis/java-storage-nio/issues/722)) ([a51c47f](https://www.github.com/googleapis/java-storage-nio/commit/a51c47f6f25e80538d7f14883e9c9676c261441b))
+* update dependency com.google.guava:guava to v31 ([#720](https://www.github.com/googleapis/java-storage-nio/issues/720)) ([062edfc](https://www.github.com/googleapis/java-storage-nio/commit/062edfc6c9cb5105623f7582378a003f12f4e746))
+
+### [0.123.13](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.12...v0.123.13) (2021-09-27)
+
+
+### Bug Fixes
+
+* make CloudStorageFileSystem#forBucket thread safe ([#719](https://www.github.com/googleapis/java-storage-nio/issues/719)) ([ac8bfee](https://www.github.com/googleapis/java-storage-nio/commit/ac8bfeee367269a06d67c7a81adc770fb5bd83e4)), closes [#691](https://www.github.com/googleapis/java-storage-nio/issues/691) [#698](https://www.github.com/googleapis/java-storage-nio/issues/698)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20210914-1.32.1 ([#711](https://www.github.com/googleapis/java-storage-nio/issues/711)) ([1b6e324](https://www.github.com/googleapis/java-storage-nio/commit/1b6e3241c8950ba9255074efa3356b81818f514f))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.3.0 ([#715](https://www.github.com/googleapis/java-storage-nio/issues/715)) ([2f42aa8](https://www.github.com/googleapis/java-storage-nio/commit/2f42aa8cf29af5d593285ba0c69902771b60c393))
+* update dependency com.google.cloud:google-cloud-storage to v2.1.4 ([#713](https://www.github.com/googleapis/java-storage-nio/issues/713)) ([7ae21d0](https://www.github.com/googleapis/java-storage-nio/commit/7ae21d0032c5c1b65f07c45b4c9d631dd19bedf8))
+* update dependency com.google.cloud:google-cloud-storage to v2.1.5 ([#716](https://www.github.com/googleapis/java-storage-nio/issues/716)) ([f3f2037](https://www.github.com/googleapis/java-storage-nio/commit/f3f2037af5b889d0e70afff730848cbd073e21e4))
+
+### [0.123.12](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.11...v0.123.12) (2021-09-15)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.1.3 ([#706](https://www.github.com/googleapis/java-storage-nio/issues/706)) ([8589fc4](https://www.github.com/googleapis/java-storage-nio/commit/8589fc4187e97491badffc408b3142524bb4c7b3))
+
+### [0.123.11](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.10...v0.123.11) (2021-09-14)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-core to v2.1.3 ([#699](https://www.github.com/googleapis/java-storage-nio/issues/699)) ([4982236](https://www.github.com/googleapis/java-storage-nio/commit/49822364396ec062a64060d127a8c4748ed15ba4))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.1 ([#700](https://www.github.com/googleapis/java-storage-nio/issues/700)) ([42e354b](https://www.github.com/googleapis/java-storage-nio/commit/42e354b712d999dbe9cce4de45d117d5d1899600))
+* update dependency com.google.cloud:google-cloud-storage to v2.1.2 ([#703](https://www.github.com/googleapis/java-storage-nio/issues/703)) ([1d07d07](https://www.github.com/googleapis/java-storage-nio/commit/1d07d073504d469777795b6922214233acecf31f))
+
+### [0.123.10](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.9...v0.123.10) (2021-09-03)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.1.1 ([#682](https://www.github.com/googleapis/java-storage-nio/issues/682)) ([2ba3c5d](https://www.github.com/googleapis/java-storage-nio/commit/2ba3c5df2c697060fab61a1f8db66b9a95f5e8fe))
+
+### [0.123.9](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.8...v0.123.9) (2021-09-03)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-core to v2.1.2 ([#662](https://www.github.com/googleapis/java-storage-nio/issues/662)) ([79548fe](https://www.github.com/googleapis/java-storage-nio/commit/79548fef0e7cce2d3233e0d49a81e8a881afc100))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.0 ([#674](https://www.github.com/googleapis/java-storage-nio/issues/674)) ([40f2c32](https://www.github.com/googleapis/java-storage-nio/commit/40f2c3298472546973f118520699fc41a0a90df2))
+
+### [0.123.8](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.7...v0.123.8) (2021-08-25)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#663](https://www.github.com/googleapis/java-storage-nio/issues/663)) ([0d06199](https://www.github.com/googleapis/java-storage-nio/commit/0d061999400d043b90d61f2cc4c6aeb697dc7efb))
+* update dependency com.google.cloud:google-cloud-storage to v2.1.0 ([#666](https://www.github.com/googleapis/java-storage-nio/issues/666)) ([6a3d1e7](https://www.github.com/googleapis/java-storage-nio/commit/6a3d1e7e0eeb6594dbb3d447214f7a12c5b3f2b1))
+
+### [0.123.7](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.6...v0.123.7) (2021-08-19)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v2.0.2 ([#657](https://www.github.com/googleapis/java-storage-nio/issues/657)) ([5a42693](https://www.github.com/googleapis/java-storage-nio/commit/5a42693dc9603d8e1f3d2123dfd80ac6e3b1f724))
+
+### [0.123.6](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.5...v0.123.6) (2021-08-12)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-core to v2.0.5 ([#643](https://www.github.com/googleapis/java-storage-nio/issues/643)) ([bea87ba](https://www.github.com/googleapis/java-storage-nio/commit/bea87ba9099b1f995c8cc4dc907a32e3ad8b843c))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.0.1 ([#644](https://www.github.com/googleapis/java-storage-nio/issues/644)) ([0185cae](https://www.github.com/googleapis/java-storage-nio/commit/0185cae96f25bd80f4f1b97c1e81573c68af3ee0))
+* update dependency com.google.cloud:google-cloud-storage to v2.0.1 ([#647](https://www.github.com/googleapis/java-storage-nio/issues/647)) ([d9c5aa9](https://www.github.com/googleapis/java-storage-nio/commit/d9c5aa92637f7140dfe5f9cf49bc7a5ede921b8d))
+
+### [0.123.5](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.4...v0.123.5) (2021-08-11)
+
+
+### Dependencies
+
+* update google-cloud-* libraries to v2 ([#639](https://www.github.com/googleapis/java-storage-nio/issues/639)) ([178011c](https://www.github.com/googleapis/java-storage-nio/commit/178011cc52a3e0876d02df3d2db1c8d6e8eee893))
+
+### [0.123.4](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.3...v0.123.4) (2021-07-27)
+
+
+### Bug Fixes
+
+* Make the StorageOption returned by LocalStorageHelper.getOptions() serializable ([#606](https://www.github.com/googleapis/java-storage-nio/issues/606)) ([12e872b](https://www.github.com/googleapis/java-storage-nio/commit/12e872b00cfefc0949e09918bcdbcd5517c750d9))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20210127-1.32.1 ([#608](https://www.github.com/googleapis/java-storage-nio/issues/608)) ([efae4cd](https://www.github.com/googleapis/java-storage-nio/commit/efae4cd411259c9e8a5c0cd465475c4994448659))
+* update dependency com.google.cloud:google-cloud-storage to v1.118.0 ([#615](https://www.github.com/googleapis/java-storage-nio/issues/615)) ([797b10c](https://www.github.com/googleapis/java-storage-nio/commit/797b10cd7aee58bae8a50e45a43975e3040e6025))
+
+### [0.123.3](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.2...v0.123.3) (2021-06-30)
+
+
+### Bug Fixes
+
+* Add `shopt -s nullglob` to dependencies script ([#596](https://www.github.com/googleapis/java-storage-nio/issues/596)) ([3017a27](https://www.github.com/googleapis/java-storage-nio/commit/3017a27618cb068d54c64af1abedcb817405d30d))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20210127-1.31.5 ([#594](https://www.github.com/googleapis/java-storage-nio/issues/594)) ([8d9ac59](https://www.github.com/googleapis/java-storage-nio/commit/8d9ac598196df954337b98f340ec1ae2afe782d2))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.4.0 ([#601](https://www.github.com/googleapis/java-storage-nio/issues/601)) ([ab08d72](https://www.github.com/googleapis/java-storage-nio/commit/ab08d72a4492f6c23886f26b6bfc5d5d58d78a18))
+* update dependency com.google.cloud:google-cloud-storage to v1.116.0 ([#590](https://www.github.com/googleapis/java-storage-nio/issues/590)) ([c2ed328](https://www.github.com/googleapis/java-storage-nio/commit/c2ed328893e49379666f7016a6944da2455f69d7))
+* update dependency com.google.cloud:google-cloud-storage to v1.117.1 ([#602](https://www.github.com/googleapis/java-storage-nio/issues/602)) ([6717f0d](https://www.github.com/googleapis/java-storage-nio/commit/6717f0d073a3467cdf644d26d03f47d4295603e2))
+
+### [0.123.2](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.1...v0.123.2) (2021-06-15)
+
+
+### Bug Fixes
+
+* Update dependencies.sh to not break on mac ([#588](https://www.github.com/googleapis/java-storage-nio/issues/588)) ([d13d01f](https://www.github.com/googleapis/java-storage-nio/commit/d13d01f20f32fb29366ab8d0b56d77c7e073c546))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.3.0 ([#583](https://www.github.com/googleapis/java-storage-nio/issues/583)) ([cad70f7](https://www.github.com/googleapis/java-storage-nio/commit/cad70f735fbd97efba6639fa637630625c85ca26))
+
+### [0.123.1](https://www.github.com/googleapis/java-storage-nio/compare/v0.123.0...v0.123.1) (2021-06-02)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v1.115.0 ([#576](https://www.github.com/googleapis/java-storage-nio/issues/576)) ([eae323d](https://www.github.com/googleapis/java-storage-nio/commit/eae323d3373fe21deaf3b636834511defc6bb348))
+
+## [0.123.0](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.14...v0.123.0) (2021-05-31)
+
+
+### Features
+
+* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#566](https://www.github.com/googleapis/java-storage-nio/issues/566)) ([12db992](https://www.github.com/googleapis/java-storage-nio/commit/12db9929092d36f1fa175b23cb83452477d8fe74))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.2.0 ([#565](https://www.github.com/googleapis/java-storage-nio/issues/565)) ([25f79b4](https://www.github.com/googleapis/java-storage-nio/commit/25f79b4a9bdcb8614bd0145c43675d838c65f96f))
+
+### [0.122.14](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.13...v0.122.14) (2021-05-12)
+
+
+### Bug Fixes
+
+* **test:** update NIOTest to ensure LocalStorageHelper is used ([#552](https://www.github.com/googleapis/java-storage-nio/issues/552)) ([e0cd38d](https://www.github.com/googleapis/java-storage-nio/commit/e0cd38d93d5ca28207540dbdf70151010ed35c47))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.1.0 ([#550](https://www.github.com/googleapis/java-storage-nio/issues/550)) ([bf60a21](https://www.github.com/googleapis/java-storage-nio/commit/bf60a21f3b7f242961eb5d6ed215e49becf3ba9a))
+
+### [0.122.13](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.12...v0.122.13) (2021-04-26)
+
+
+### Bug Fixes
+
+* release scripts from issuing overlapping phases ([#528](https://www.github.com/googleapis/java-storage-nio/issues/528)) ([e037375](https://www.github.com/googleapis/java-storage-nio/commit/e0373758a003f57b26e2bb6cf0c0cd69549078ba))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-core to v1.94.7 ([#486](https://www.github.com/googleapis/java-storage-nio/issues/486)) ([42b281d](https://www.github.com/googleapis/java-storage-nio/commit/42b281daf441d9a93cea6b9c29ed27e0e6155908))
+* update dependency com.google.cloud:google-cloud-core to v1.94.8 ([#535](https://www.github.com/googleapis/java-storage-nio/issues/535)) ([cae4e43](https://www.github.com/googleapis/java-storage-nio/commit/cae4e43ec8bb2379fbf266fc1d95885fb6357064))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.1 ([#532](https://www.github.com/googleapis/java-storage-nio/issues/532)) ([5250ad7](https://www.github.com/googleapis/java-storage-nio/commit/5250ad79c2b5b8a10ec5e991e9905bcfee2d9be8))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v1 ([#536](https://www.github.com/googleapis/java-storage-nio/issues/536)) ([f70c1f6](https://www.github.com/googleapis/java-storage-nio/commit/f70c1f6904b51ac1f3e17e2937ca1107b56827ca))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.15 ([#525](https://www.github.com/googleapis/java-storage-nio/issues/525)) ([c3d8486](https://www.github.com/googleapis/java-storage-nio/commit/c3d84864b525eb7f79bef0067df48d6bc77df2d3))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.16 ([#537](https://www.github.com/googleapis/java-storage-nio/issues/537)) ([1107a79](https://www.github.com/googleapis/java-storage-nio/commit/1107a7994967ccda5d588afdf4b6f31a4b8e3a97))
+
+### [0.122.12](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.11...v0.122.12) (2021-04-12)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.0 ([#516](https://www.github.com/googleapis/java-storage-nio/issues/516)) ([d6c79c0](https://www.github.com/googleapis/java-storage-nio/commit/d6c79c020112b7321cc9781522bddf98d131f990))
+
+### [0.122.11](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.10...v0.122.11) (2021-03-16)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.1 ([#492](https://www.github.com/googleapis/java-storage-nio/issues/492)) ([684ae0a](https://www.github.com/googleapis/java-storage-nio/commit/684ae0ab43d8bed5dff07472866769b07ecd0dd5))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.12 ([#472](https://www.github.com/googleapis/java-storage-nio/issues/472)) ([34819d9](https://www.github.com/googleapis/java-storage-nio/commit/34819d986dfebe953eec603718ab339018d69d12))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.13 ([#491](https://www.github.com/googleapis/java-storage-nio/issues/491)) ([14bacab](https://www.github.com/googleapis/java-storage-nio/commit/14bacaba6336835b1686d91fb98c394785d7821d))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.14 ([#495](https://www.github.com/googleapis/java-storage-nio/issues/495)) ([5eb9102](https://www.github.com/googleapis/java-storage-nio/commit/5eb9102c61fade3412c0398f18b57feb37fa0695))
+
+### [0.122.10](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.9...v0.122.10) (2021-02-25)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.0 ([#466](https://www.github.com/googleapis/java-storage-nio/issues/466)) ([0e6a967](https://www.github.com/googleapis/java-storage-nio/commit/0e6a967879b830487d58045311ea50d54f939148))
+
+### [0.122.9](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.8...v0.122.9) (2021-02-24)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v1.113.11 ([#454](https://www.github.com/googleapis/java-storage-nio/issues/454)) ([5287939](https://www.github.com/googleapis/java-storage-nio/commit/5287939496da59719e3c1f9281c4cc2967b40559))
+
+### [0.122.8](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.7...v0.122.8) (2021-02-23)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-core to v1.94.1 ([#405](https://www.github.com/googleapis/java-storage-nio/issues/405)) ([21622b1](https://www.github.com/googleapis/java-storage-nio/commit/21622b1718aebfba85c6c50d06f885dcda42b593))
+
+### [0.122.7](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.6...v0.122.7) (2021-02-19)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.19.0 ([#445](https://www.github.com/googleapis/java-storage-nio/issues/445)) ([114e292](https://www.github.com/googleapis/java-storage-nio/commit/114e29250af32aadd9770f725acc7ad5ac72745f))
+
+### [0.122.6](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.5...v0.122.6) (2021-02-18)
+
+
+### Bug Fixes
+
+* cleanup use of non-preferred terms ([#411](https://www.github.com/googleapis/java-storage-nio/issues/411)) ([3a3d465](https://www.github.com/googleapis/java-storage-nio/commit/3a3d46599b463801714cc415c0e49e112f8d8838))
+* move autovalue to annotation processor path ([#179](https://www.github.com/googleapis/java-storage-nio/issues/179)) ([a5023f1](https://www.github.com/googleapis/java-storage-nio/commit/a5023f1e44448cdb42a7cddde24baf6a8e18f110))
+* Set storage update time in FakeStorageRpc ([#174](https://www.github.com/googleapis/java-storage-nio/issues/174)) ([1328de4](https://www.github.com/googleapis/java-storage-nio/commit/1328de4adf15450f055cae0506ffc97a97309b33)), closes [#173](https://www.github.com/googleapis/java-storage-nio/issues/173)
+* use projectId from CloudStorageConfig ([#429](https://www.github.com/googleapis/java-storage-nio/issues/429)) ([b6ec240](https://www.github.com/googleapis/java-storage-nio/commit/b6ec240876c66262be3ea99782f8abaec4372c96))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20210127-1.31.0 ([#428](https://www.github.com/googleapis/java-storage-nio/issues/428)) ([7de6c68](https://www.github.com/googleapis/java-storage-nio/commit/7de6c68e368455832bfb8404a8ef917b2db6d9e6))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.18.0 ([#355](https://www.github.com/googleapis/java-storage-nio/issues/355)) ([1c9e80f](https://www.github.com/googleapis/java-storage-nio/commit/1c9e80f7d9d0a3f747e1eac9900f3a40084f752a))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.10 ([#439](https://www.github.com/googleapis/java-storage-nio/issues/439)) ([b6c7718](https://www.github.com/googleapis/java-storage-nio/commit/b6c7718dc0bd7d697eca526ca275b72e602f7dfe))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.9 ([#356](https://www.github.com/googleapis/java-storage-nio/issues/356)) ([6cdc367](https://www.github.com/googleapis/java-storage-nio/commit/6cdc367e842d04dcb02ad52e9ae92a715748cd44))
+
+### [0.122.5](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.4...v0.122.5) (2021-01-12)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-storage to v1.113.8 ([#314](https://www.github.com/googleapis/java-storage-nio/issues/314)) ([577eaed](https://www.github.com/googleapis/java-storage-nio/commit/577eaed2478d749515e89f4961a42004c5654a07))
+* update dependency com.google.guava:guava to v30.1-android ([#319](https://www.github.com/googleapis/java-storage-nio/issues/319)) ([8814bc3](https://www.github.com/googleapis/java-storage-nio/commit/8814bc31dedd85f5d3c50ce1891055bb334bab0b))
+
+### [0.122.4](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.3...v0.122.4) (2020-12-16)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20201112-1.31.0 ([#312](https://www.github.com/googleapis/java-storage-nio/issues/312)) ([6f2e7e6](https://www.github.com/googleapis/java-storage-nio/commit/6f2e7e6e5d791a8164e9b5fcb7b1541230830c43))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.1 ([#320](https://www.github.com/googleapis/java-storage-nio/issues/320)) ([c56e6c0](https://www.github.com/googleapis/java-storage-nio/commit/c56e6c08d2d65123e0272a85fc36842a2e8986c4))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.17.0 ([#321](https://www.github.com/googleapis/java-storage-nio/issues/321)) ([c26c2a6](https://www.github.com/googleapis/java-storage-nio/commit/c26c2a6cb9c10e88454e008cba865f7eea5fae19))
+
+### [0.122.3](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.2...v0.122.3) (2020-12-03)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.0 ([#305](https://www.github.com/googleapis/java-storage-nio/issues/305)) ([79245ae](https://www.github.com/googleapis/java-storage-nio/commit/79245ae5ded370d310f31939aa36572563437bb3))
+
+### [0.122.2](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.1...v0.122.2) (2020-11-23)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20201112-1.30.10 ([#290](https://www.github.com/googleapis/java-storage-nio/issues/290)) ([56ec0eb](https://www.github.com/googleapis/java-storage-nio/commit/56ec0eb1b39665a6a93c48b62282a1e3c7d5c5f1))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.4 ([#286](https://www.github.com/googleapis/java-storage-nio/issues/286)) ([8a02f78](https://www.github.com/googleapis/java-storage-nio/commit/8a02f7880e849bbc6cb857b5610a8a88c770998c))
+
+### [0.122.1](https://www.github.com/googleapis/java-storage-nio/compare/v0.122.0...v0.122.1) (2020-11-13)
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.15.0 ([#287](https://www.github.com/googleapis/java-storage-nio/issues/287)) ([24938be](https://www.github.com/googleapis/java-storage-nio/commit/24938be0e6765ad391bdd9664dec7b33b384be06))
+
+## [0.122.0](https://www.github.com/googleapis/java-storage-nio/compare/v0.121.2...v0.122.0) (2020-11-06)
+
+
+### Features
+
+* update cloudstorageconfiguration to improve copy accross cross-bucket performance ([#168](https://www.github.com/googleapis/java-storage-nio/issues/168)) ([db74524](https://www.github.com/googleapis/java-storage-nio/commit/db74524d68487df71c80b122d8c0ff384dc9ace3))
+* **deps:** adopt flatten plugin and google-cloud-shared-dependencies ([#156](https://www.github.com/googleapis/java-storage-nio/issues/156)) ([510f6a5](https://www.github.com/googleapis/java-storage-nio/commit/510f6a5efc4a13b010020a8d67ec1511bbd46564))
+
+
+### Bug Fixes
+
+* FakeStorageRpc#list to filtering the files by bucket and prefix ([#208](https://www.github.com/googleapis/java-storage-nio/issues/208)) ([21f606e](https://www.github.com/googleapis/java-storage-nio/commit/21f606eca67b1c8a471ee28f7e2dd3851a0c493e))
+* implement writeWithResponse in FakeStorageRpc ([#187](https://www.github.com/googleapis/java-storage-nio/issues/187)) ([10ddfae](https://www.github.com/googleapis/java-storage-nio/commit/10ddfae3923f1d5e64b151293db238f1af433d03))
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200611-1.30.9 ([#166](https://www.github.com/googleapis/java-storage-nio/issues/166)) ([3cab5f2](https://www.github.com/googleapis/java-storage-nio/commit/3cab5f25e081c0198d06903a42c7de3dbd34bbad))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200727-1.30.10 ([#171](https://www.github.com/googleapis/java-storage-nio/issues/171)) ([62998f0](https://www.github.com/googleapis/java-storage-nio/commit/62998f0adfb22b194e2dd633532e13bf27a79479))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200814-1.30.10 ([#206](https://www.github.com/googleapis/java-storage-nio/issues/206)) ([0d7cd44](https://www.github.com/googleapis/java-storage-nio/commit/0d7cd44e73b0b9456a8ba96cc6e6d0e60a0b7d4e))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200927-1.30.10 ([#233](https://www.github.com/googleapis/java-storage-nio/issues/233)) ([91b7918](https://www.github.com/googleapis/java-storage-nio/commit/91b7918539186763ecaa377cfb6f3908105df279))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.0 ([#226](https://www.github.com/googleapis/java-storage-nio/issues/226)) ([83acbd7](https://www.github.com/googleapis/java-storage-nio/commit/83acbd766b06d66fc9a41385fdd49aa57d9a0291))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.1 ([#239](https://www.github.com/googleapis/java-storage-nio/issues/239)) ([bd1928d](https://www.github.com/googleapis/java-storage-nio/commit/bd1928da234dae6fc2fb1ad6658d89a9ebc7af82))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.2 ([#243](https://www.github.com/googleapis/java-storage-nio/issues/243)) ([4ca9869](https://www.github.com/googleapis/java-storage-nio/commit/4ca9869d99fc3d2e578fb86fbd9053f855f1e51c))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.12.0 ([#246](https://www.github.com/googleapis/java-storage-nio/issues/246)) ([3e6171b](https://www.github.com/googleapis/java-storage-nio/commit/3e6171b2d4c4c7832b62288faf30f767c5278762))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.12.1 ([#255](https://www.github.com/googleapis/java-storage-nio/issues/255)) ([73d7dd2](https://www.github.com/googleapis/java-storage-nio/commit/73d7dd2ec6ca371480955c844ffb5e6aed4f608f))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.13.0 ([#260](https://www.github.com/googleapis/java-storage-nio/issues/260)) ([54895cf](https://www.github.com/googleapis/java-storage-nio/commit/54895cf441f1e1723cf941aa1f6cab249acae6b8))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.14.1 ([#271](https://www.github.com/googleapis/java-storage-nio/issues/271)) ([058d7c9](https://www.github.com/googleapis/java-storage-nio/commit/058d7c9c1471846f3d897cac31cb5f6d42ce5a7d))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.2 ([#167](https://www.github.com/googleapis/java-storage-nio/issues/167)) ([3b14bbc](https://www.github.com/googleapis/java-storage-nio/commit/3b14bbc05d5658c57d4f272fdfdf152d7d9ee18d))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.3 ([#169](https://www.github.com/googleapis/java-storage-nio/issues/169)) ([4e7bac1](https://www.github.com/googleapis/java-storage-nio/commit/4e7bac10c2466d1407e8f1a6de838261e6c1b097))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.4 ([#189](https://www.github.com/googleapis/java-storage-nio/issues/189)) ([af492b8](https://www.github.com/googleapis/java-storage-nio/commit/af492b8068101727793e64e89da2778205fa08b6))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.6 ([#191](https://www.github.com/googleapis/java-storage-nio/issues/191)) ([9bbc1fc](https://www.github.com/googleapis/java-storage-nio/commit/9bbc1fc755271f2ac6b798d50f6c0ba8e022c589))
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.9.0 ([#202](https://www.github.com/googleapis/java-storage-nio/issues/202)) ([cf312a3](https://www.github.com/googleapis/java-storage-nio/commit/cf312a3fe46ec446d1b5ee418849b3ab9abee87e))
+* update dependency com.google.cloud:google-cloud-storage to v1.110.0 ([#154](https://www.github.com/googleapis/java-storage-nio/issues/154)) ([fd6de38](https://www.github.com/googleapis/java-storage-nio/commit/fd6de38ee63376afff03c7e794dce1f4524a4375))
+* update dependency com.google.cloud:google-cloud-storage to v1.112.0 ([#199](https://www.github.com/googleapis/java-storage-nio/issues/199)) ([8a38817](https://www.github.com/googleapis/java-storage-nio/commit/8a3881732551bcef1d76f76026a29071fc50dd43))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.0 ([#205](https://www.github.com/googleapis/java-storage-nio/issues/205)) ([068002e](https://www.github.com/googleapis/java-storage-nio/commit/068002e1145418ecb848ed066346d1fc6ec14807))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.1 ([#212](https://www.github.com/googleapis/java-storage-nio/issues/212)) ([acc1fe8](https://www.github.com/googleapis/java-storage-nio/commit/acc1fe8f23c5926000c7a869ca9a71372850c46a))
+* update dependency com.google.cloud:google-cloud-storage to v1.113.2 ([#266](https://www.github.com/googleapis/java-storage-nio/issues/266)) ([9d2c11d](https://www.github.com/googleapis/java-storage-nio/commit/9d2c11d009394f3f3ffd1b115b97b350aa64d1b7))
+* update dependency com.google.guava:guava to v30 ([#263](https://www.github.com/googleapis/java-storage-nio/issues/263)) ([4e81dab](https://www.github.com/googleapis/java-storage-nio/commit/4e81daba421e0e42695203c6fe74670b32a3f576))
+* update dependency org.mockito:mockito-core to v3.4.4 ([#170](https://www.github.com/googleapis/java-storage-nio/issues/170)) ([3e06bd5](https://www.github.com/googleapis/java-storage-nio/commit/3e06bd5b07065acb1b41a03ebbb862487c046eeb))
+* update dependency org.mockito:mockito-core to v3.5.10 ([#203](https://www.github.com/googleapis/java-storage-nio/issues/203)) ([33fdc31](https://www.github.com/googleapis/java-storage-nio/commit/33fdc315a5b4bccdebb13262cbc5868011abe444))
+* update dependency org.mockito:mockito-core to v3.5.11 ([#214](https://www.github.com/googleapis/java-storage-nio/issues/214)) ([575c308](https://www.github.com/googleapis/java-storage-nio/commit/575c30882ab84e1b2b1ce34d5176b4f8688a8136))
+* update dependency org.mockito:mockito-core to v3.5.7 ([#194](https://www.github.com/googleapis/java-storage-nio/issues/194)) ([8cc7616](https://www.github.com/googleapis/java-storage-nio/commit/8cc76166baf3f5f49223bb8eafc8704679c4d427))
+
+### [0.121.2](https://www.github.com/googleapis/java-storage-nio/compare/v0.120.1...v0.121.2) (2020-06-18)
+
+
+### Bug Fixes
+
+* update FakeStorageRpc to extend StorageRpcTestBase [#135](https://www.github.com/googleapis/java-storage-nio/issues/135) ([7614295](https://www.github.com/googleapis/java-storage-nio/commit/761429571eea15b11b2d44b4f5a2c65b4f649484))
+
+### [0.121.1](https://www.github.com/googleapis/java-storage-nio/compare/v0.120.0...v0.121.1) (2020-06-16)
+
+
+### Dependencies
+
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200410-1.30.9 ([#97](https://www.github.com/googleapis/java-storage-nio/issues/97)) ([b86aed8](https://www.github.com/googleapis/java-storage-nio/commit/b86aed82b7959f2866d3430a4ab79f5983ea6e6f))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200430-1.30.9 ([#110](https://www.github.com/googleapis/java-storage-nio/issues/110)) ([9350ed4](https://www.github.com/googleapis/java-storage-nio/commit/9350ed430c656fc3622025299008de934c80b99d))
+* update dependency com.google.auto.value:auto-value to v1.7.1 ([#98](https://www.github.com/googleapis/java-storage-nio/issues/98)) ([3f07925](https://www.github.com/googleapis/java-storage-nio/commit/3f07925cb97b578774d721640588a83d3426b58d))
+* update dependency com.google.auto.value:auto-value to v1.7.2 ([#104](https://www.github.com/googleapis/java-storage-nio/issues/104)) ([ff05184](https://www.github.com/googleapis/java-storage-nio/commit/ff05184b1c151ebea2dd45a818cdf5d65f437adc))
+* update dependency com.google.auto.value:auto-value to v1.7.3 ([#131](https://www.github.com/googleapis/java-storage-nio/issues/131)) ([a225b87](https://www.github.com/googleapis/java-storage-nio/commit/a225b878e793e111390ce9e403b2a0018cff7c4c))
+* update dependency com.google.auto.value:auto-value-annotations to v1.7.1 ([#99](https://www.github.com/googleapis/java-storage-nio/issues/99)) ([6aef5d6](https://www.github.com/googleapis/java-storage-nio/commit/6aef5d60f1d30e861b5ca6899f4942c3831c1bf8))
+* update dependency com.google.auto.value:auto-value-annotations to v1.7.2 ([#105](https://www.github.com/googleapis/java-storage-nio/issues/105)) ([c0f3611](https://www.github.com/googleapis/java-storage-nio/commit/c0f36119bafbef4536f2ec66a8c417fe3eae624f))
+* update dependency com.google.auto.value:auto-value-annotations to v1.7.3 ([#132](https://www.github.com/googleapis/java-storage-nio/issues/132)) ([3a46dd5](https://www.github.com/googleapis/java-storage-nio/commit/3a46dd59a3777aea490e6100a20425183d982cb3))
+* update dependency com.google.cloud:google-cloud-core-bom to v1.93.5 ([#115](https://www.github.com/googleapis/java-storage-nio/issues/115)) ([7088962](https://www.github.com/googleapis/java-storage-nio/commit/70889626de81793e19c85b8c886dbea3456449d0))
+* update dependency com.google.cloud:google-cloud-storage to v1.108.0 ([#100](https://www.github.com/googleapis/java-storage-nio/issues/100)) ([6a9a281](https://www.github.com/googleapis/java-storage-nio/commit/6a9a28105561d4408110d54bb92d4e1099ed7544))
+* update dependency com.google.cloud:google-cloud-storage to v1.109.0 ([#133](https://www.github.com/googleapis/java-storage-nio/issues/133)) ([cb23faf](https://www.github.com/googleapis/java-storage-nio/commit/cb23faf0132db61bfdc8d0c6409dc9fa98ae2d11))
+* update dependency com.google.http-client:google-http-client-bom to v1.35.0 ([#93](https://www.github.com/googleapis/java-storage-nio/issues/93)) ([0683dd2](https://www.github.com/googleapis/java-storage-nio/commit/0683dd21731b86d22a9d9f7201dad9deb1878d8a))
+* update dependency com.google.protobuf:protobuf-bom to v3.12.0 ([#111](https://www.github.com/googleapis/java-storage-nio/issues/111)) ([4e592fb](https://www.github.com/googleapis/java-storage-nio/commit/4e592fb506a9b85c8d38c662605d4f97ad60b730))
+* update dependency com.google.protobuf:protobuf-bom to v3.12.1 ([#114](https://www.github.com/googleapis/java-storage-nio/issues/114)) ([1b9b5e5](https://www.github.com/googleapis/java-storage-nio/commit/1b9b5e5a780f44abcba2b7eb25a2a46f5bf8c1ba))
+* update dependency com.google.protobuf:protobuf-bom to v3.12.2 ([#116](https://www.github.com/googleapis/java-storage-nio/issues/116)) ([c297693](https://www.github.com/googleapis/java-storage-nio/commit/c297693dee0747d259ff1bcbc40d05218a782709))
+
+
+### Documentation
+
+* update CONTRIBUTING.md to include code formatting ([#534](https://www.github.com/googleapis/java-storage-nio/issues/534)) ([#103](https://www.github.com/googleapis/java-storage-nio/issues/103)) ([c329a58](https://www.github.com/googleapis/java-storage-nio/commit/c329a58086501f77d7c7e0db44eb06cb68eb933b))
+
+## [0.121.0](https://www.github.com/googleapis/java-storage-nio/compare/0.120.0-alpha...v0.121.0) (2020-04-24)
+
+
+### Features
+
+* make repo releasable, add parent pom ([#6](https://www.github.com/googleapis/java-storage-nio/issues/6)) ([6bca496](https://www.github.com/googleapis/java-storage-nio/commit/6bca49650fa5bac4682836149c48db95908909a5))
+
+
+### Bug Fixes
+
+* point to correct api documentation ([#68](https://www.github.com/googleapis/java-storage-nio/issues/68)) ([43675b6](https://www.github.com/googleapis/java-storage-nio/commit/43675b6416d9bec224704d92b8b9abf1fc9db10b))
+
+
+### Dependencies
+
+* update core dependencies ([#27](https://www.github.com/googleapis/java-storage-nio/issues/27)) ([b59ae15](https://www.github.com/googleapis/java-storage-nio/commit/b59ae1587bc08714c549b4d22dc078e16ef48d98))
+* update core dependencies to v29 ([#78](https://www.github.com/googleapis/java-storage-nio/issues/78)) ([63d9a56](https://www.github.com/googleapis/java-storage-nio/commit/63d9a56dc0a4e7c7e1eb9e83a6fda6d715d82edb))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20191127-1.30.8 ([#33](https://www.github.com/googleapis/java-storage-nio/issues/33)) ([bd4d1b2](https://www.github.com/googleapis/java-storage-nio/commit/bd4d1b2c6dfdf2497f68fb328778e751c3a0813a))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20191127-1.30.9 ([#48](https://www.github.com/googleapis/java-storage-nio/issues/48)) ([6a63920](https://www.github.com/googleapis/java-storage-nio/commit/6a63920d440229b0657f5464b122c3eb8bb6d882))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200226-1.30.9 ([#53](https://www.github.com/googleapis/java-storage-nio/issues/53)) ([5319c7e](https://www.github.com/googleapis/java-storage-nio/commit/5319c7e63de772983884d9d2e275102aab30055c))
+* update dependency com.google.apis:google-api-services-storage to v1-rev20200326-1.30.9 ([#77](https://www.github.com/googleapis/java-storage-nio/issues/77)) ([315cc86](https://www.github.com/googleapis/java-storage-nio/commit/315cc8660bf670098c498397f6c7f6b7b9d4376c))
+* update dependency com.google.cloud:google-cloud-core-bom to v1.93.3 ([#43](https://www.github.com/googleapis/java-storage-nio/issues/43)) ([58a7c03](https://www.github.com/googleapis/java-storage-nio/commit/58a7c038fa3bd2b72486aa40019153004b7e7958))
+* update dependency com.google.cloud:google-cloud-storage to v1.104.0 ([#26](https://www.github.com/googleapis/java-storage-nio/issues/26)) ([020d7cf](https://www.github.com/googleapis/java-storage-nio/commit/020d7cf350d05dfd30be14ad7aab8ee051f4797f))
+* update dependency com.google.cloud:google-cloud-storage to v1.105.2 ([#44](https://www.github.com/googleapis/java-storage-nio/issues/44)) ([1bfa769](https://www.github.com/googleapis/java-storage-nio/commit/1bfa7697d39f7856defe997da1016986632be4cd))
+* update dependency com.google.cloud:google-cloud-storage to v1.106.0 ([#56](https://www.github.com/googleapis/java-storage-nio/issues/56)) ([57fff87](https://www.github.com/googleapis/java-storage-nio/commit/57fff872878942210db056974132c4123ae08e0b))
+* update dependency com.google.cloud.samples:shared-configuration to v1.0.13 ([#63](https://www.github.com/googleapis/java-storage-nio/issues/63)) ([ecac9a9](https://www.github.com/googleapis/java-storage-nio/commit/ecac9a9a839cfe9649ab53b5eb675c16ddeeea6a))
+* update dependency com.google.guava:guava to v23 ([#52](https://www.github.com/googleapis/java-storage-nio/issues/52)) ([ef0baaa](https://www.github.com/googleapis/java-storage-nio/commit/ef0baaa6805b0fa57854af8ae903262c55ee7d5d))
+* update dependency com.google.http-client:google-http-client-bom to v1.34.2 ([#25](https://www.github.com/googleapis/java-storage-nio/issues/25)) ([c1c3269](https://www.github.com/googleapis/java-storage-nio/commit/c1c326989940f660df0095b6a0efe3253c2da1b0))
+* update dependency com.google.protobuf:protobuf-bom to v3.11.4 ([#30](https://www.github.com/googleapis/java-storage-nio/issues/30)) ([ddd0555](https://www.github.com/googleapis/java-storage-nio/commit/ddd05553cb5af81b0a56277076c81a2fa4ad1abd))
diff --git a/java-storage-nio/EnableAutoValue.txt b/java-storage-nio/EnableAutoValue.txt
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/java-storage-nio/README.md b/java-storage-nio/README.md
new file mode 100644
index 000000000000..8d5ecdc153a2
--- /dev/null
+++ b/java-storage-nio/README.md
@@ -0,0 +1,291 @@
+# Google NIO Filesystem Provider for Google Cloud Storage Client for Java
+
+Java idiomatic client for [NIO Filesystem Provider for Google Cloud Storage][product-docs].
+
+[![Maven][maven-version-image]][maven-version-link]
+![Stability][stability-image]
+
+- [Product Documentation][product-docs]
+- [Client Library Documentation][javadocs]
+
+> Note: This client is a work-in-progress, and may occasionally
+> make backwards-incompatible changes.
+
+
+## Quickstart
+
+If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file
+
+```xml
+
+
+
+ com.google.cloud
+ libraries-bom
+ 22.0.0
+ pom
+ import
+
+
+
+
+
+
+ com.google.cloud
+ google-cloud-nio
+
+
+
+```
+
+If you are using Maven without BOM, add this to your dependencies:
+
+
+```xml
+
+ com.google.cloud
+ google-cloud-nio
+ 0.123.10
+
+
+```
+
+If you are using Gradle 5.x or later, add this to your dependencies
+
+```Groovy
+implementation platform('com.google.cloud:libraries-bom:23.0.0')
+
+implementation 'com.google.cloud:google-cloud-nio'
+```
+If you are using Gradle without BOM, add this to your dependencies
+
+```Groovy
+implementation 'com.google.cloud:google-cloud-nio:0.123.10'
+```
+
+If you are using SBT, add this to your dependencies
+
+```Scala
+libraryDependencies += "com.google.cloud" % "google-cloud-nio" % "0.123.10"
+```
+
+## Authentication
+
+See the [Authentication][authentication] section in the base directory's README.
+
+## Authorization
+
+The client application making API calls must be granted [authorization scopes][auth-scopes] required for the desired NIO Filesystem Provider for Google Cloud Storage APIs, and the authenticated principal must have the [IAM role(s)][predefined-iam-roles] required to access GCP resources using the NIO Filesystem Provider for Google Cloud Storage API calls.
+
+## Getting Started
+
+### Prerequisites
+
+You will need a [Google Cloud Platform Console][developer-console] project with the NIO Filesystem Provider for Google Cloud Storage [API enabled][enable-api].
+
+[Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by
+[installing the Google Cloud SDK][cloud-sdk] and running the following commands in command line:
+`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`.
+
+### Installation and setup
+
+You'll need to obtain the `google-cloud-nio` library. See the [Quickstart](#quickstart) section
+to add `google-cloud-nio` as a dependency in your code.
+
+## About NIO Filesystem Provider for Google Cloud Storage
+
+
+[NIO Filesystem Provider for Google Cloud Storage][product-docs] provides a Google Cloud Storage extension for Java's NIO Filesystem.
+
+See the [NIO Filesystem Provider for Google Cloud Storage client library docs][javadocs] to learn how to
+use this NIO Filesystem Provider for Google Cloud Storage Client Library.
+
+
+#### About Google Cloud Storage
+
+[Google Cloud Storage](https://cloud.google.com/storage/) is a durable and highly available
+object storage service. Google Cloud Storage is almost infinitely scalable
+and guarantees consistency: when a write succeeds, the latest copy of the
+object will be returned to any GET, globally.
+
+See the [Google Cloud Storage docs](https://cloud.google.com/storage/docs/signup?hl=en) for more details
+on how to activate Cloud Storage for your project.
+
+#### About Java NIO Providers
+
+Java NIO Providers is an extension mechanism that is part of Java and allows
+third parties to extend Java's [normal File API](https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html) to support
+additional filesystems.
+
+#### Accessing files
+
+The simplest way to get started is with `Paths` and `Files`:
+
+```java
+Path path = Paths.get(URI.create("gs://bucket/lolcat.csv"));
+List lines = Files.readAllLines(path, StandardCharsets.UTF_8);
+```
+
+If you know the paths will point to Google Cloud Storage, you can also use the
+direct formulation:
+
+```java
+try (CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("bucket")) {
+ Path path = fs.getPath("lolcat.csv");
+ List lines = Files.readAllLines(path, StandardCharsets.UTF_8);
+}
+```
+
+Once you have a `Path` you can use it as you would a normal file. For example
+you can use `InputStream` and `OutputStream` for streaming:
+
+```java
+try (InputStream input = Files.openInputStream(path)) {
+ // ...
+}
+```
+
+You can also set various attributes using CloudStorageOptions static helpers:
+
+```java
+Files.write(csvPath, csvLines, StandardCharsets.UTF_8,
+ withMimeType(MediaType.CSV_UTF8),
+ withoutCaching());
+```
+
+#### Limitations
+
+This library is usable, but not yet complete. The following features are not
+yet implemented:
+ * Resuming upload or download
+ * Generations
+ * File attributes
+ * (more - list is not exhaustive)
+
+Some features are not on the roadmap: this library would be a poor choice to
+mirror a local filesystem onto the cloud because Google Cloud Storage has a
+different set of features from your local disk. This library, by design,
+does not mask those differences. Rather, it aims to expose the common
+subset via a familiar interface.
+
+**NOTE:** Cloud Storage uses a flat namespace and therefore doesn't support real
+directories. So this library supports what's known as "pseudo-directories". Any
+path that includes a trailing slash, will be considered a directory. It will
+always be assumed to exist, without performing any I/O. Paths without the trailing
+slash will result in an I/O operation to check a file is present in that "directory".
+This allows you to do path manipulation in the same manner as you would with the normal UNIX file
+system implementation. Using this feature with buckets or "directory" paths that do not exist
+is not recommended, as at the time I/O is performed the failure may not be handled gracefully.
+You can disable this feature with `CloudStorageConfiguration.usePseudoDirectories()`.
+
+#### Complete source code
+
+There are examples in [google-cloud-nio-examples](google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/)
+for your perusal.
+
+
+
+
+
+## Troubleshooting
+
+To get help, follow the instructions in the [shared Troubleshooting document][troubleshooting].
+
+## Supported Java Versions
+
+Java 7 or above is required for using this client.
+
+Google's Java client libraries,
+[Google Cloud Client Libraries][cloudlibs]
+and
+[Google Cloud API Libraries][apilibs],
+follow the
+[Oracle Java SE support roadmap][oracle]
+(see the Oracle Java SE Product Releases section).
+
+### For new development
+
+In general, new feature development occurs with support for the lowest Java
+LTS version covered by Oracle's Premier Support (which typically lasts 5 years
+from initial General Availability). If the minimum required JVM for a given
+library is changed, it is accompanied by a [semver][semver] major release.
+
+Java 11 and (in September 2021) Java 17 are the best choices for new
+development.
+
+### Keeping production systems current
+
+Google tests its client libraries with all current LTS versions covered by
+Oracle's Extended Support (which typically lasts 8 years from initial
+General Availability).
+
+#### Legacy support
+
+Google's client libraries support legacy versions of Java runtimes with long
+term stable libraries that don't receive feature updates on a best efforts basis
+as it may not be possible to backport all patches.
+
+Google provides updates on a best efforts basis to apps that continue to use
+Java 7, though apps might need to upgrade to current versions of the library
+that supports their JVM.
+
+#### Where to find specific information
+
+The latest versions and the supported Java versions are identified on
+the individual GitHub repository `github.com/GoogleAPIs/java-SERVICENAME`
+and on [google-cloud-java][g-c-j].
+
+## Versioning
+
+
+This library follows [Semantic Versioning](http://semver.org/).
+
+
+It is currently in major version zero (``0.y.z``), which means that anything may change at any time
+and the public API should not be considered stable.
+
+
+## Contributing
+
+
+Contributions to this library are always welcome and highly encouraged.
+
+See [CONTRIBUTING][contributing] for more information how to get started.
+
+Please note that this project is released with a Contributor Code of Conduct. By participating in
+this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more
+information.
+
+
+## License
+
+Apache 2.0 - See [LICENSE][license] for more information.
+
+Java is a registered trademark of Oracle and/or its affiliates.
+
+[product-docs]: https://cloud.google.com/storage/docs
+[javadocs]: https://googleapis.dev/java/google-cloud-nio/latest
+[stability-image]: https://img.shields.io/badge/stability-beta-yellow
+[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-nio.svg
+[maven-version-link]: https://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-nio&core=gav
+[authentication]: https://github.com/googleapis/google-cloud-java#authentication
+[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
+[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
+[iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy
+[developer-console]: https://console.developers.google.com/
+[create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects
+[cloud-sdk]: https://cloud.google.com/sdk/
+[troubleshooting]: https://github.com/googleapis/google-cloud-common/blob/main/troubleshooting/readme.md#troubleshooting
+[contributing]: https://github.com/googleapis/java-storage-nio/blob/main/CONTRIBUTING.md
+[code-of-conduct]: https://github.com/googleapis/java-storage-nio/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct
+[license]: https://github.com/googleapis/java-storage-nio/blob/main/LICENSE
+
+[enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=storage.googleapis.com
+[libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM
+[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png
+
+[semver]: https://semver.org/
+[cloudlibs]: https://cloud.google.com/apis/docs/client-libraries-explained
+[apilibs]: https://cloud.google.com/apis/docs/client-libraries-explained#google_api_client_libraries
+[oracle]: https://www.oracle.com/java/technologies/java-se-support-roadmap.html
+[g-c-j]: http://github.com/googleapis/google-cloud-java
diff --git a/java-storage-nio/google-cloud-nio-bom/pom.xml b/java-storage-nio/google-cloud-nio-bom/pom.xml
new file mode 100644
index 000000000000..01700564f3a1
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-bom/pom.xml
@@ -0,0 +1,82 @@
+
+
+ 4.0.0
+ com.google.cloud
+ google-cloud-nio-bom
+ 0.128.14
+ pom
+
+ com.google.cloud
+ google-cloud-pom-parent
+ 1.83.0-SNAPSHOT
+ ../../google-cloud-pom-parent/pom.xml
+
+
+ Google Cloud NIO BOM
+ https://github.com/googleapis/google-cloud-java
+
+ BOM for Google Cloud NIO
+
+
+
+ Google LLC
+
+
+
+
+ suztomo
+ Tomo Suzuki
+ suztomo@google.com
+ Google LLC
+
+ Developer
+
+
+
+
+
+ scm:git:https://github.com/googleapis/google-cloud-java.git
+ scm:git:git@github.com:googleapis/google-cloud-java.git
+ https://github.com/googleapis/google-cloud-java
+
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+
+
+
+ com.google.cloud
+ google-cloud-nio
+ 0.128.14
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-site-plugin
+
+
+ false
+
+
+
+
+
diff --git a/java-storage-nio/google-cloud-nio-examples/pom.xml b/java-storage-nio/google-cloud-nio-examples/pom.xml
new file mode 100644
index 000000000000..a79a1301b591
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-examples/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+ google-cloud-nio-examples
+ 0.128.14
+ jar
+ Google Cloud NIO Examples
+ https://github.com/googleapis/google-cloud-java
+
+ Examples for google-cloud-nio (Java idiomatic client for Google Cloud
+ Storage).
+
+
+ com.google.cloud
+ google-cloud-nio-parent
+ 0.128.14
+
+
+
+ com.google.guava
+ guava
+
+
+
+ google-cloud-nio-examples
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ false
+
+
+
+ org.codehaus.mojo
+ clirr-maven-plugin
+
+ true
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+
+
+
+
diff --git a/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/CountBytes.java b/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/CountBytes.java
new file mode 100644
index 000000000000..75ac7f1cf704
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/CountBytes.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.examples.nio;
+
+import com.google.common.base.Stopwatch;
+import com.google.common.io.BaseEncoding;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.ByteBuffer;
+import java.nio.channels.SeekableByteChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * CountBytes will read through the whole file given as input.
+ *
+ *
This example shows how to read a file size using NIO. File.size returns the size of the file
+ * as saved in Storage metadata. This class also shows how to read all of the file's contents using
+ * NIO, computes a MD5 hash, and reports how long it took.
+ *
+ *
See the
+ * README for compilation instructions. Run this code with
+ *
+ *
{@code target/appassembler/bin/CountBytes }
+ */
+public class CountBytes {
+
+ /** See the class documentation. */
+ public static void main(String[] args) throws IOException {
+ if (args.length == 0 || args[0].equals("--help")) {
+ help();
+ return;
+ }
+ for (String a : args) {
+ countFile(a);
+ }
+ }
+
+ /**
+ * Print the length of the indicated file.
+ *
+ *
This uses the normal Java NIO Api, so it can take advantage of any installed NIO Filesystem
+ * provider without any extra effort.
+ */
+ private static void countFile(String fname) {
+ // large buffers pay off
+ final int bufSize = 50 * 1024 * 1024;
+ try {
+ Path path = Paths.get(new URI(fname));
+ long size = Files.size(path);
+ System.out.println(fname + ": " + size + " bytes.");
+ ByteBuffer buf = ByteBuffer.allocate(bufSize);
+ System.out.println("Reading the whole file...");
+ Stopwatch sw = Stopwatch.createStarted();
+ try (SeekableByteChannel chan = Files.newByteChannel(path)) {
+ long total = 0;
+ int readCalls = 0;
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ while (chan.read(buf) > 0) {
+ readCalls++;
+ md.update(buf.array(), 0, buf.position());
+ total += buf.position();
+ buf.flip();
+ }
+ readCalls++; // We must count the last call
+ long elapsed = sw.elapsed(TimeUnit.SECONDS);
+ System.out.println(
+ "Read all "
+ + total
+ + " bytes in "
+ + elapsed
+ + "s. "
+ + "("
+ + readCalls
+ + " calls to chan.read)");
+ String hex = String.valueOf(BaseEncoding.base16().encode(md.digest()));
+ System.out.println("The MD5 is: 0x" + hex);
+ if (total != size) {
+ System.out.println(
+ "Wait, this doesn't match! We saw "
+ + total
+ + " bytes, "
+ + "yet the file size is listed at "
+ + size
+ + " bytes.");
+ }
+ }
+ } catch (Exception ex) {
+ System.out.println(fname + ": " + ex.toString());
+ }
+ }
+
+ private static void help() {
+ String[] help = {"The argument is a ", "and we show the length of that file."};
+ for (String s : help) {
+ System.out.println(s);
+ }
+ }
+}
diff --git a/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/ParallelCountBytes.java b/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/ParallelCountBytes.java
new file mode 100644
index 000000000000..820f922f7147
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/ParallelCountBytes.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.examples.nio;
+
+import com.google.common.base.Stopwatch;
+import com.google.common.io.BaseEncoding;
+import java.io.Closeable;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.ByteBuffer;
+import java.nio.channels.SeekableByteChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * ParallelCountBytes will read through the whole file given as input.
+ *
+ *
This example shows how to go through all the contents of a file, in order, using multithreaded
+ * NIO reads. It prints a MD5 hash and reports how long it took.
+ *
+ *
See the
+ * README for compilation instructions. Run this code with
+ *
+ *
+ */
+public class ParallelCountBytes {
+
+ /**
+ * WorkUnit holds a buffer and the instructions for what to put in it.
+ *
+ *
Use it like this:
+ *
+ *
+ *
call()
+ *
the data is now in buf, you can access it directly
+ *
if need more, call resetForIndex(...) and go back to the top.
+ *
else, call close()
+ *
+ */
+ private static class WorkUnit implements Callable, Closeable {
+ public final ByteBuffer buf;
+ final SeekableByteChannel chan;
+ final int blockSize;
+ int blockIndex;
+
+ public WorkUnit(SeekableByteChannel chan, int blockSize, int blockIndex) {
+ this.chan = chan;
+ this.buf = ByteBuffer.allocate(blockSize);
+ this.blockSize = blockSize;
+ this.blockIndex = blockIndex;
+ }
+
+ @Override
+ public WorkUnit call() throws IOException {
+ long pos = ((long) blockSize) * blockIndex;
+ if (pos > chan.size()) {
+ return this;
+ }
+ chan.position(pos);
+ // read until buffer is full, or EOF
+ while (chan.read(buf) > 0) {}
+ ;
+ return this;
+ }
+
+ public WorkUnit resetForIndex(int blockIndex) {
+ this.blockIndex = blockIndex;
+ buf.flip();
+ return this;
+ }
+
+ public void close() throws IOException {
+ chan.close();
+ }
+ }
+
+ /** See the class documentation. */
+ public static void main(String[] args) throws Exception {
+ if (args.length == 0 || args[0].equals("--help")) {
+ help();
+ return;
+ }
+ for (String a : args) {
+ countFile(a);
+ }
+ }
+
+ /**
+ * Print the length and MD5 of the indicated file.
+ *
+ *
This uses the normal Java NIO Api, so it can take advantage of any installed NIO Filesystem
+ * provider without any extra effort.
+ */
+ private static void countFile(String fname) throws Exception {
+ // large buffers pay off
+ final int bufSize = 50 * 1024 * 1024;
+ Queue> work = new ArrayDeque<>();
+ Path path = Paths.get(new URI(fname));
+ long size = Files.size(path);
+ System.out.println(fname + ": " + size + " bytes.");
+ int nThreads = (int) Math.ceil(size / (double) bufSize);
+ if (nThreads > 4) nThreads = 4;
+ System.out.println("Reading the whole file using " + nThreads + " threads...");
+ Stopwatch sw = Stopwatch.createStarted();
+ long total = 0;
+ MessageDigest md = MessageDigest.getInstance("MD5");
+
+ ExecutorService exec = Executors.newFixedThreadPool(nThreads);
+ int blockIndex;
+ for (blockIndex = 0; blockIndex < nThreads; blockIndex++) {
+ work.add(exec.submit(new WorkUnit(Files.newByteChannel(path), bufSize, blockIndex)));
+ }
+ while (!work.isEmpty()) {
+ WorkUnit full = work.remove().get();
+ md.update(full.buf.array(), 0, full.buf.position());
+ total += full.buf.position();
+ if (full.buf.hasRemaining()) {
+ full.close();
+ } else {
+ work.add(exec.submit(full.resetForIndex(blockIndex++)));
+ }
+ }
+ exec.shutdown();
+
+ long elapsed = sw.elapsed(TimeUnit.SECONDS);
+ System.out.println("Read all " + total + " bytes in " + elapsed + "s. ");
+ String hex = String.valueOf(BaseEncoding.base16().encode(md.digest()));
+ System.out.println("The MD5 is: 0x" + hex);
+ if (total != size) {
+ System.out.println(
+ "Wait, this doesn't match! We saw "
+ + total
+ + " bytes, "
+ + "yet the file size is listed at "
+ + size
+ + " bytes.");
+ }
+ }
+
+ private static void help() {
+ String[] help = {"The argument is a ", "and we show the length of that file."};
+ for (String s : help) {
+ System.out.println(s);
+ }
+ }
+}
diff --git a/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/Stat.java b/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/Stat.java
new file mode 100644
index 000000000000..e68b0ea1d877
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-examples/src/main/java/com/google/cloud/examples/nio/Stat.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.examples.nio;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.spi.FileSystemProvider;
+
+/**
+ * Stat is a super-simple program that just displays the size of the file passed as argument.
+ *
+ *
It's meant to be used to test Google Cloud's integration with Java NIO.
+ *
+ *
You can either use the '--check' argument to see whether Google Cloud Storage is enabled, or
+ * you can directly pass in a Google Cloud Storage file name to use. In that case you have to be
+ * logged in (using e.g. the gcloud auth command).
+ *
+ *
See the
+ * README for compilation instructions. Run this code with
+ *
+ *
In short, this version (in google-cloud-examples) is in a package that lists google-cloud-nio
+ * as a dependency, so it will work directly without having to do any special work.
+ */
+public class Stat {
+
+ /** See the class documentation. */
+ public static void main(String[] args) throws IOException {
+ if (args.length == 0 || args[0].equals("--help")) {
+ help();
+ return;
+ }
+ if (args[0].equals("--list")) {
+ listFilesystems();
+ return;
+ }
+ if (args[0].equals("--check")) {
+ checkGcs();
+ return;
+ }
+ for (String a : args) {
+ statFile(a);
+ }
+ }
+
+ /**
+ * Print the length of the indicated file.
+ *
+ *
This uses the normal Java NIO Api, so it can take advantage of any installed NIO Filesystem
+ * provider without any extra effort.
+ */
+ private static void statFile(String fname) {
+ try {
+ Path path = Paths.get(new URI(fname));
+ long size = Files.size(path);
+ System.out.println(fname + ": " + size + " bytes.");
+ } catch (Exception ex) {
+ System.out.println(fname + ": " + ex.toString());
+ }
+ }
+
+ private static void help() {
+ String[] help = {
+ "The arguments can be one of:",
+ " * ",
+ " to display the length of that file.",
+ "",
+ " * --list",
+ " to list the filesystem providers.",
+ "",
+ " * --check",
+ " to double-check the Google Cloud Storage provider is installed.",
+ "",
+ "The purpose of this tool is to demonstrate that the Google Cloud NIO filesystem provider",
+ "can add Google Cloud Storage support to programs not explicitly designed for it.",
+ "",
+ "This tool normally knows nothing of Google Cloud Storage. If you pass it --check",
+ "or a Google Cloud Storage file name (e.g. gs://mybucket/myfile), it will show an error.",
+ "However, by just adding the google-cloud-nio jar as a dependency and recompiling, this",
+ "tool is made aware of gs:// paths and can access files on the cloud.",
+ "",
+ "The Google Cloud NIO filesystem provider can similarly enable existing Java 7 programs",
+ "to read and write cloud files, even if they have no special built-in cloud support."
+ };
+ for (String s : help) {
+ System.out.println(s);
+ }
+ }
+
+ private static void listFilesystems() {
+ System.out.println("Installed filesystem providers:");
+ for (FileSystemProvider p : FileSystemProvider.installedProviders()) {
+ System.out.println(" " + p.getScheme());
+ }
+ }
+
+ private static void checkGcs() {
+ FileSystem fs = FileSystems.getFileSystem(URI.create("gs://domain-registry-alpha"));
+ System.out.println("Success! We can instantiate a gs:// filesystem.");
+ System.out.println("isOpen: " + fs.isOpen());
+ System.out.println("isReadOnly: " + fs.isReadOnly());
+ }
+}
diff --git a/java-storage-nio/google-cloud-nio-retrofit/README.md b/java-storage-nio/google-cloud-nio-retrofit/README.md
new file mode 100644
index 000000000000..319fad186fd0
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-retrofit/README.md
@@ -0,0 +1,53 @@
+Example of adding the Google Cloud Storage NIO Provider to a legacy jar
+=======================================================================
+
+This project shows how to add (retrofit) Google Cloud Storage capabilities to a
+jar file for a Java 7 application that uses Java NIO without the need to
+recompile.
+
+Note that whenever possible, you instead want to recompile the app and use the normal
+dependency mechanism to add a dependency to google-cloud-nio. You can see examples of
+this in the
+[google-cloud-examples](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples)
+project,
+[under nio](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/nio).
+
+To run this example:
+
+1. Before running the example, go to the [Google Developers Console][developers-console] to ensure that Google Cloud Storage API is enabled.
+
+2. Log in using gcloud SDK (`gcloud auth login` in command line)
+
+3. Compile the JAR with:
+ ```
+ mvn package -DskipTests -Dmaven.javadoc.skip=true -Dmaven.source.skip=true
+ ```
+
+4. Run the sample with:
+
+[//]: # ({x-version-update-start:google-cloud-nio:current})
+ ```
+ java -cp google-cloud-nio/target/google-cloud-nio-0.120.1-alpha-SNAPSHOT-shaded.jar:google-cloud-nio-retrofit/target/google-cloud-nio-retrofit-0.120.1-alpha-SNAPSHOT.jar com.google.cloud.nio.retrofit.ListFilesystems
+ ```
+
+ Notice that it lists Google Cloud Storage ("gs"), which it wouldn't if you ran it without the NIO jar:
+ ```
+ java -cp google-cloud-nio-retrofit/target/google-cloud-nio-retrofit-0.120.1-alpha-SNAPSHOT.jar com.google.cloud.nio.retrofit.ListFilesystems
+ ```
+[//]: # ({x-version-update-end})
+
+The sample doesn't have anything about Google Cloud Storage in it. It gets that ability from the NIO
+jar that we're adding to the classpath. We use the NIO "shaded" jar for this purpose as it
+also includes the dependencies for google-cloud-nio.
+The underlying mechanism is Java's standard
+[ServiceLoader](https://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html)
+facility, the
+[standard way](http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/filesystemprovider.html)
+to plug in NIO providers like this one.
+
+If you have access to a project's source code you can also simply add google-cloud-nio as
+a dependency and let Maven pull in the required dependencies (this is what the NIO unit tests do).
+This approach is preferable as the shaded jar approach may waste memory on multiple copies of
+dependencies.
+
+[developers-console]:https://console.developers.google.com/
diff --git a/java-storage-nio/google-cloud-nio-retrofit/pom.xml b/java-storage-nio/google-cloud-nio-retrofit/pom.xml
new file mode 100644
index 000000000000..057db7e3ef61
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-retrofit/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+ google-cloud-nio-retrofit
+ 0.128.14
+ jar
+ Google Cloud NIO Retrofit Example
+ https://github.com/googleapis/google-cloud-java
+
+ Demonstrates how to use the google-cloud-nio jar to add Google Cloud Storage functionality to legacy code.
+
+
+ com.google.cloud
+ google-cloud-nio-parent
+ 0.128.14
+
+
+ google-cloud-nio-retrofit
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ false
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/java-storage-nio/google-cloud-nio-retrofit/src/main/java/com/google/cloud/nio/retrofit/ListFilesystems.java b/java-storage-nio/google-cloud-nio-retrofit/src/main/java/com/google/cloud/nio/retrofit/ListFilesystems.java
new file mode 100644
index 000000000000..831350bf8dad
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio-retrofit/src/main/java/com/google/cloud/nio/retrofit/ListFilesystems.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2015 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.nio.retrofit;
+
+import java.io.IOException;
+import java.nio.file.spi.FileSystemProvider;
+
+/**
+ * ListFilesystems is a simple program that lists the available NIO filesystems.
+ *
+ *
Note that the code here doesn't do anything special to link in the google-cloud-nio code. It
+ * doesn't use any of its methods.
+ *
+ *
The README explains how, by just adding the google-cloud-nio JAR in the classpath, this
+ * program will magically gain the ability to read files on Google Cloud Storage.
+ */
+public class ListFilesystems {
+
+ /** See the class documentation. */
+ public static void main(String[] args) throws IOException {
+ listFilesystems();
+ }
+
+ private static void listFilesystems() {
+ System.out.println("Installed filesystem providers:");
+ for (FileSystemProvider p : FileSystemProvider.installedProviders()) {
+ System.out.println(" " + p.getScheme());
+ }
+ }
+}
diff --git a/java-storage-nio/google-cloud-nio/EnableAutoValue.txt b/java-storage-nio/google-cloud-nio/EnableAutoValue.txt
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/java-storage-nio/google-cloud-nio/pom.xml b/java-storage-nio/google-cloud-nio/pom.xml
new file mode 100644
index 000000000000..305f416c4b8f
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/pom.xml
@@ -0,0 +1,201 @@
+
+
+ 4.0.0
+ google-cloud-nio
+ 0.128.14
+ jar
+ Google Cloud NIO
+ https://github.com/googleapis/google-cloud-java
+
+ FileSystemProvider for Java NIO to access Google Cloud Storage transparently.
+
+
+ com.google.cloud
+ google-cloud-nio-parent
+ 0.128.14
+
+
+ google-cloud-nio
+
+
+
+ com.google.cloud
+ google-cloud-storage
+
+
+ com.google.apis
+ google-api-services-storage
+
+
+ com.google.guava
+ guava
+
+
+ com.google.api
+ gax
+ 2.76.1-SNAPSHOT
+
+
+ com.google.cloud
+ google-cloud-core
+ 2.66.1-SNAPSHOT
+
+
+ com.google.http-client
+ google-http-client
+
+
+ com.google.http-client
+ google-http-client-gson
+
+
+ com.google.auto.value
+ auto-value-annotations
+
+
+ javax.inject
+ javax.inject
+ 1
+
+
+ com.google.code.findbugs
+ jsr305
+
+
+ com.google.api
+ gax
+ testlib
+ test
+ 2.76.1-SNAPSHOT
+
+
+
+ junit
+ junit
+ test
+
+
+ com.google.guava
+ guava-testlib
+ test
+
+
+ com.google.truth
+ truth
+ test
+
+
+ com.google.auth
+ google-auth-library-credentials
+ test
+
+
+
+ org.mockito
+ mockito-core
+ 4.11.0
+ test
+
+
+ com.google.cloud
+ google-cloud-core
+ test
+ tests
+ 2.66.1-SNAPSHOT
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+ 3.2.4
+
+
+ org.ow2.asm
+ asm
+ 9.9.1
+
+
+ org.ow2.asm
+ asm-commons
+ 9.9.1
+
+
+
+ true
+
+
+ com
+ shaded.cloud_nio.com
+
+ com.google.**
+ com.fasterxml.**
+
+
+ com.google.cloud.storage.**
+ com.google.auto.**
+
+
+
+ org
+ shaded.cloud_nio.org
+
+ org.apache.**
+ org.threeten.**
+ org.codehaus.**
+
+
+
+ io
+ shaded.cloud_nio.io
+
+ io.opencensus.**
+ io.grpc.**
+
+
+
+ okio
+ shaded.cloud_nio.okio
+
+
+ google
+ shaded.cloud_nio.google
+
+
+
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
+ maven-dependency-plugin
+
+
+
+ com.google.api:gax:jar
+ javax.annotation:javax.annotation-api
+
+
+
+
+
+
diff --git a/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageConfiguration.java b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageConfiguration.java
new file mode 100644
index 000000000000..26b35fcc8963
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageConfiguration.java
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.contrib.nio;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import java.io.EOFException;
+import java.net.SocketException;
+import java.net.SocketTimeoutException;
+import java.util.Map;
+import javax.annotation.Nullable;
+import javax.net.ssl.SSLException;
+
+/** Configuration for {@link CloudStorageFileSystem} instances. */
+@AutoValue
+public abstract class CloudStorageConfiguration {
+
+ public static final CloudStorageConfiguration DEFAULT = builder().build();
+
+ // Users can change this: then this affects every filesystem object created
+ // later, including via SPI. This is meant to be done only once, at the beginning
+ // of some main program, in order to force all libraries to use some settings we like.
+ // Libraries should never call this. It'll cause surprise to the writers of the main
+ // program and they'll be unhappy. Instead, create your own filesystem object with the
+ // right configuration and pass it along.
+ private static CloudStorageConfiguration userSpecifiedDefault = CloudStorageConfiguration.DEFAULT;
+
+ // Don't call this one, call the one in CloudStorageFileSystemProvider.
+ static void setUserSpecifiedDefault(@Nullable CloudStorageConfiguration config) {
+ if (null == config) {
+ userSpecifiedDefault = CloudStorageConfiguration.DEFAULT;
+ } else {
+ userSpecifiedDefault = config;
+ }
+ }
+
+ static CloudStorageConfiguration getUserSpecifiedDefault() {
+ return userSpecifiedDefault;
+ }
+
+ /** Returns path of current working directory. This defaults to the root directory. */
+ public abstract String workingDirectory();
+
+ /**
+ * Returns {@code true} if we shouldn't throw an exception when encountering object names
+ * containing superfluous slashes, e.g. {@code a//b}.
+ */
+ public abstract boolean permitEmptyPathComponents();
+
+ /**
+ * Returns {@code true} if '/' prefix on absolute object names should be removed before I/O.
+ *
+ *
If you disable this feature, please take into consideration that all paths created from a
+ * URI will have the leading slash.
+ */
+ public abstract boolean stripPrefixSlash();
+
+ /**
+ * Returns {@code true} if directories and paths with a trailing slash should be treated as fake
+ * directories.
+ *
+ *
With this feature, if file "foo/bar.txt" exists then both "foo" and "foo/" will be treated
+ * as if they were existing directories. On path construction no I/O will be performed, bucket and
+ * "directory" will treated as if they exist.
+ */
+ public abstract boolean usePseudoDirectories();
+
+ /** Returns block size (in bytes) used when talking to the Google Cloud Storage HTTP server. */
+ public abstract int blockSize();
+
+ /**
+ * Returns the number of times we try re-opening a channel if it's closed unexpectedly while
+ * reading.
+ */
+ public abstract int maxChannelReopens();
+
+ /**
+ * Returns the project to be billed when accessing buckets. Leave empty for normal semantics, set
+ * to bill that project (project you own) for all accesses. This is required for accessing
+ * requester-pays buckets. This value cannot be null.
+ */
+ public abstract @Nullable String userProject();
+
+ /**
+ * Returns whether userProject will be cleared for non-requester-pays buckets. That is, if false
+ * (the default value), setting userProject causes that project to be billed regardless of whether
+ * the bucket is requester-pays or not. If true, setting userProject will only cause that project
+ * to be billed when the project is requester-pays.
+ *
+ *
Setting this will cause the bucket to be accessed when the CloudStorageFileSystem object is
+ * created.
+ */
+ public abstract boolean useUserProjectOnlyForRequesterPaysBuckets();
+
+ /**
+ * Returns the set of HTTP error codes that will be retried, in addition to the normally retryable
+ * ones.
+ */
+ public abstract ImmutableList retryableHttpCodes();
+
+ /**
+ * Returns the set of exceptions for which we'll try a channel reopen if maxChannelReopens is
+ * positive.
+ */
+ public abstract ImmutableList> reopenableExceptions();
+
+ /**
+ * Creates a new builder, initialized with the following settings:
+ *
+ *
+ *
Performing I/O on paths with extra slashes, e.g. {@code a//b} will throw an error.
+ *
The prefix slash on absolute paths will be removed when converting to an object name.
+ *
Pseudo-directories are enabled, so any path with a trailing slash is a fake directory.
+ *
Channel re-opens are disabled.
+ *
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /** Builder for {@link CloudStorageConfiguration}. */
+ public static final class Builder {
+
+ private String workingDirectory = UnixPath.ROOT;
+ private boolean permitEmptyPathComponents;
+ private boolean stripPrefixSlash = true;
+ private boolean usePseudoDirectories = true;
+ private int blockSize = CloudStorageFileSystem.BLOCK_SIZE_DEFAULT;
+ private int maxChannelReopens = 0;
+ private @Nullable String userProject = null;
+ // Think of this as "clear userProject if not RequesterPays"
+ private boolean useUserProjectOnlyForRequesterPaysBuckets = false;
+ private ImmutableList retryableHttpCodes = ImmutableList.of(500, 502, 503);
+ private ImmutableList> reopenableExceptions =
+ ImmutableList.>of(
+ SSLException.class,
+ EOFException.class,
+ SocketException.class,
+ SocketTimeoutException.class);
+
+ /**
+ * Changes current working directory for new filesystem. This defaults to the root directory.
+ * The working directory cannot be changed once it's been set. You'll need to create another
+ * {@link CloudStorageFileSystem} object.
+ *
+ * @throws IllegalArgumentException if {@code path} is not absolute.
+ */
+ public Builder workingDirectory(String path) {
+ checkNotNull(path);
+ checkArgument(UnixPath.getPath(false, path).isAbsolute(), "not absolute: %s", path);
+ workingDirectory = path;
+ return this;
+ }
+
+ /**
+ * Configures whether or not we should throw an exception when encountering object names
+ * containing superfluous slashes, e.g. {@code a//b}.
+ */
+ public Builder permitEmptyPathComponents(boolean value) {
+ permitEmptyPathComponents = value;
+ return this;
+ }
+
+ /**
+ * Configures if the '/' prefix on absolute object names should be removed before I/O.
+ *
+ *
If you disable this feature, please take into consideration that all paths created from a
+ * URI will have the leading slash.
+ */
+ public Builder stripPrefixSlash(boolean value) {
+ stripPrefixSlash = value;
+ return this;
+ }
+
+ /** Configures if paths with a trailing slash should be treated as fake directories. */
+ public Builder usePseudoDirectories(boolean value) {
+ usePseudoDirectories = value;
+ return this;
+ }
+
+ /**
+ * Sets the block size in bytes that should be used for each HTTP request to the API.
+ *
+ *
The default is {@value CloudStorageFileSystem#BLOCK_SIZE_DEFAULT}.
+ */
+ public Builder blockSize(int value) {
+ blockSize = value;
+ return this;
+ }
+
+ public Builder maxChannelReopens(int value) {
+ maxChannelReopens = value;
+ return this;
+ }
+
+ public Builder userProject(String value) {
+ userProject = value;
+ return this;
+ }
+
+ public Builder autoDetectRequesterPays(boolean value) {
+ useUserProjectOnlyForRequesterPaysBuckets = value;
+ return this;
+ }
+
+ public Builder retryableHttpCodes(ImmutableList value) {
+ retryableHttpCodes = value;
+ return this;
+ }
+
+ public Builder reopenableExceptions(ImmutableList> values) {
+ reopenableExceptions = values;
+ return this;
+ }
+
+ /** Creates new instance without destroying builder. */
+ public CloudStorageConfiguration build() {
+ return new AutoValue_CloudStorageConfiguration(
+ workingDirectory,
+ permitEmptyPathComponents,
+ stripPrefixSlash,
+ usePseudoDirectories,
+ blockSize,
+ maxChannelReopens,
+ userProject,
+ useUserProjectOnlyForRequesterPaysBuckets,
+ retryableHttpCodes,
+ reopenableExceptions);
+ }
+
+ Builder(CloudStorageConfiguration toModify) {
+ workingDirectory = toModify.workingDirectory();
+ permitEmptyPathComponents = toModify.permitEmptyPathComponents();
+ stripPrefixSlash = toModify.stripPrefixSlash();
+ usePseudoDirectories = toModify.usePseudoDirectories();
+ blockSize = toModify.blockSize();
+ maxChannelReopens = toModify.maxChannelReopens();
+ userProject = toModify.userProject();
+ useUserProjectOnlyForRequesterPaysBuckets =
+ toModify.useUserProjectOnlyForRequesterPaysBuckets();
+ retryableHttpCodes = toModify.retryableHttpCodes();
+ reopenableExceptions = toModify.reopenableExceptions();
+ }
+
+ Builder() {}
+ }
+
+ static CloudStorageConfiguration fromMap(Map env) {
+ return fromMap(builder(), env);
+ }
+
+ static CloudStorageConfiguration fromMap(
+ CloudStorageConfiguration defaultValues, Map env) {
+ return fromMap(new Builder(defaultValues), env);
+ }
+
+ private static CloudStorageConfiguration fromMap(Builder builder, Map env) {
+ for (Map.Entry entry : env.entrySet()) {
+ switch (entry.getKey()) {
+ case "workingDirectory":
+ builder.workingDirectory((String) entry.getValue());
+ break;
+ case "permitEmptyPathComponents":
+ builder.permitEmptyPathComponents((Boolean) entry.getValue());
+ break;
+ case "stripPrefixSlash":
+ builder.stripPrefixSlash((Boolean) entry.getValue());
+ break;
+ case "usePseudoDirectories":
+ builder.usePseudoDirectories((Boolean) entry.getValue());
+ break;
+ case "blockSize":
+ builder.blockSize((Integer) entry.getValue());
+ break;
+ case "maxChannelReopens":
+ builder.maxChannelReopens((Integer) entry.getValue());
+ break;
+ case "userProject":
+ builder.userProject((String) entry.getValue());
+ break;
+ case "useUserProjectOnlyForRequesterPaysBuckets":
+ builder.autoDetectRequesterPays((Boolean) entry.getValue());
+ break;
+ case "retryableHttpCodes":
+ builder.retryableHttpCodes((ImmutableList) entry.getValue());
+ break;
+ case "reopenableExceptions":
+ builder.reopenableExceptions(
+ (ImmutableList>) entry.getValue());
+ break;
+ default:
+ throw new IllegalArgumentException(entry.getKey());
+ }
+ }
+ return builder.build();
+ }
+
+ CloudStorageConfiguration() {}
+}
diff --git a/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileAttributeView.java b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileAttributeView.java
new file mode 100644
index 000000000000..0624a94abc8d
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileAttributeView.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.contrib.nio;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Storage;
+import com.google.common.base.MoreObjects;
+import java.io.IOException;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.attribute.BasicFileAttributeView;
+import java.nio.file.attribute.FileTime;
+import java.util.Objects;
+import javax.annotation.concurrent.Immutable;
+
+/** Metadata view for a Google Cloud Storage object. */
+@Immutable
+public final class CloudStorageFileAttributeView implements BasicFileAttributeView {
+
+ private final Storage storage;
+ private final CloudStoragePath path;
+
+ CloudStorageFileAttributeView(Storage storage, CloudStoragePath path) {
+ this.storage = checkNotNull(storage);
+ this.path = checkNotNull(path);
+ }
+
+ /** Returns {@value CloudStorageFileSystem#GCS_VIEW}. */
+ @Override
+ public String name() {
+ return CloudStorageFileSystem.GCS_VIEW;
+ }
+
+ @Override
+ public CloudStorageFileAttributes readAttributes() throws IOException {
+ if (path.seemsLikeADirectory() && path.getFileSystem().config().usePseudoDirectories()) {
+ return new CloudStoragePseudoDirectoryAttributes(path);
+ }
+ BlobInfo blobInfo = storage.get(path.getBlobId());
+ if (blobInfo == null) {
+ throw new NoSuchFileException(path.toUri().toString());
+ }
+
+ return new CloudStorageObjectAttributes(blobInfo);
+ }
+
+ /** This feature is not supported, since Cloud Storage objects are immutable. */
+ @Override
+ public void setTimes(FileTime lastModifiedTime, FileTime lastAccessTime, FileTime createTime) {
+ throw new CloudStorageObjectImmutableException();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ return this == other
+ || other instanceof CloudStorageFileAttributeView
+ && Objects.equals(storage, ((CloudStorageFileAttributeView) other).storage)
+ && Objects.equals(path, ((CloudStorageFileAttributeView) other).path);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(storage, path);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this).add("storage", storage).add("path", path).toString();
+ }
+}
diff --git a/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileAttributes.java b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileAttributes.java
new file mode 100644
index 000000000000..17f93cc6a0ef
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileAttributes.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.contrib.nio;
+
+import com.google.cloud.storage.Acl;
+import com.google.common.base.Optional;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.List;
+import java.util.Map;
+
+/** Interface for attributes on a Cloud Storage file or pseudo-directory. */
+public interface CloudStorageFileAttributes extends BasicFileAttributes {
+
+ /**
+ * Returns HTTP etag hash of object contents.
+ *
+ * @see "https://developers.google.com/storage/docs/hashes-etags"
+ */
+ Optional etag();
+
+ /**
+ * Returns mime type (e.g. text/plain), if set.
+ *
+ * @see "http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types"
+ */
+ Optional mimeType();
+
+ /**
+ * Returns access control list.
+ *
+ * @see "https://developers.google.com/storage/docs/reference-headers#acl"
+ */
+ Optional> acl();
+
+ /**
+ * Returns {@code Cache-Control} HTTP header value, if set.
+ *
+ * @see "https://developers.google.com/storage/docs/reference-headers#cachecontrol"
+ */
+ Optional cacheControl();
+
+ /**
+ * Returns {@code Content-Encoding} HTTP header value, if set.
+ *
+ * @see "https://developers.google.com/storage/docs/reference-headers#contentencoding"
+ */
+ Optional contentEncoding();
+
+ /**
+ * Returns {@code Content-Disposition} HTTP header value, if set.
+ *
+ * @see "https://developers.google.com/storage/docs/reference-headers#contentdisposition"
+ */
+ Optional contentDisposition();
+
+ /**
+ * Returns user-specified metadata.
+ *
+ * @see "https://developers.google.com/storage/docs/reference-headers#contentdisposition"
+ */
+ Map userMetadata();
+}
diff --git a/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileSystem.java b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileSystem.java
new file mode 100644
index 000000000000..7b930d4a722e
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileSystem.java
@@ -0,0 +1,376 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.contrib.nio;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.Objects.requireNonNull;
+
+import com.google.api.gax.paging.Page;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageException;
+import com.google.cloud.storage.StorageOptions;
+import com.google.common.base.Strings;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.FileStore;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
+import java.nio.file.WatchService;
+import java.nio.file.attribute.FileTime;
+import java.nio.file.attribute.UserPrincipalLookupService;
+import java.util.HashMap;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import javax.annotation.CheckReturnValue;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
+
+/**
+ * Google Cloud Storage {@link FileSystem} implementation.
+ *
+ * @see Concepts
+ * and Terminology
+ * @see Bucket and Object Naming
+ * Guidelines
+ */
+@ThreadSafe
+public final class CloudStorageFileSystem extends FileSystem {
+
+ public static final String URI_SCHEME = "gs";
+ public static final String GCS_VIEW = "gcs";
+ public static final String BASIC_VIEW = "basic";
+ public static final String POSIX_VIEW = "posix";
+ public static final int BLOCK_SIZE_DEFAULT = 2 * 1024 * 1024;
+ public static final FileTime FILE_TIME_UNKNOWN = FileTime.fromMillis(0);
+ public static final Set SUPPORTED_VIEWS =
+ ImmutableSet.of(BASIC_VIEW, GCS_VIEW, POSIX_VIEW);
+ private final CloudStorageFileSystemProvider provider;
+ private final String bucket;
+ private final CloudStorageConfiguration config;
+ private static final LoadingCache
+ PROVIDER_CACHE_BY_CONFIG =
+ CacheBuilder.newBuilder()
+ .build(
+ new CacheLoader() {
+ @Override
+ public CloudStorageFileSystemProvider load(ProviderCacheKey key) {
+ CloudStorageConfiguration config = key.cloudStorageConfiguration;
+ StorageOptions storageOptions = key.storageOptions;
+ String userProject = config.userProject();
+ return (storageOptions == null)
+ ? new CloudStorageFileSystemProvider(userProject)
+ : new CloudStorageFileSystemProvider(userProject, storageOptions);
+ }
+ });
+
+ // Don't call this one, call the one in CloudStorageFileSystemProvider.
+ static void setDefaultCloudStorageConfiguration(CloudStorageConfiguration config) {
+ CloudStorageConfiguration.setUserSpecifiedDefault(config);
+ }
+
+ static CloudStorageConfiguration getDefaultCloudStorageConfiguration() {
+ return CloudStorageConfiguration.getUserSpecifiedDefault();
+ }
+
+ /**
+ * Lists the project's buckets. Pass "null" to use the default project.
+ *
+ *
Example of listing buckets, specifying the page size and a name prefix.
+ *
+ *
However some systems and build environments might be flaky when it comes to Java SPI. This
+ * is because services are generally runtime dependencies and depend on a META-INF file being
+ * present in your jar (generated by Google Auto at compile-time). In such cases, this method
+ * provides a simpler alternative.
+ *
+ * @see #forBucket(String, CloudStorageConfiguration)
+ * @see java.nio.file.FileSystems#getFileSystem(java.net.URI)
+ */
+ @CheckReturnValue
+ public static CloudStorageFileSystem forBucket(String bucket) {
+ return forBucket(bucket, CloudStorageConfiguration.getUserSpecifiedDefault());
+ }
+
+ /**
+ * Creates new file system instance for {@code bucket}, with customizable settings.
+ *
+ * @see #forBucket(String)
+ */
+ @CheckReturnValue
+ public static CloudStorageFileSystem forBucket(String bucket, CloudStorageConfiguration config) {
+ return forBucket(bucket, config, null);
+ }
+
+ /**
+ * Returns Google Cloud Storage {@link FileSystem} object for {@code bucket}.
+ *
+ *
Google Cloud Storage file system objects are basically free. You can create as many as you
+ * want, even if you have multiple instances for the same bucket. There's no actual system
+ * resources associated with this object. Therefore calling {@link #close()} on the returned value
+ * is optional.
+ *
+ *
Note: It is also possible to instantiate this class via Java's {@code
+ * FileSystems.getFileSystem(URI.create("gs://bucket"))}. We discourage you from using that if
+ * possible, for the reasons documented in {@link
+ * CloudStorageFileSystemProvider#newFileSystem(URI, java.util.Map)}
+ *
+ * @see java.nio.file.FileSystems#getFileSystem(URI)
+ */
+ @CheckReturnValue
+ public static CloudStorageFileSystem forBucket(
+ String bucket, CloudStorageConfiguration config, @Nullable StorageOptions storageOptions) {
+ checkArgument(
+ !bucket.startsWith(URI_SCHEME + ":"), "Bucket name must not have schema: %s", bucket);
+ checkNotNull(config);
+ CloudStorageFileSystemProvider result;
+ ProviderCacheKey providerCacheKey = new ProviderCacheKey(config, storageOptions);
+ try {
+ result = PROVIDER_CACHE_BY_CONFIG.get(providerCacheKey);
+ } catch (ExecutionException | UncheckedExecutionException e) {
+ throw new IllegalStateException(
+ "Unable to resolve CloudStorageFileSystemProvider for the provided configuration", e);
+ }
+ return new CloudStorageFileSystem(result, bucket, config);
+ }
+
+ CloudStorageFileSystem(
+ CloudStorageFileSystemProvider provider, String bucket, CloudStorageConfiguration config) {
+ checkArgument(!bucket.isEmpty(), "bucket");
+ this.bucket = bucket;
+ if (config.useUserProjectOnlyForRequesterPaysBuckets()) {
+ if (Strings.isNullOrEmpty(config.userProject())) {
+ throw new IllegalArgumentException(
+ "If useUserProjectOnlyForRequesterPaysBuckets is set, then userProject must be set too.");
+ }
+ // detect whether we want to pay for these accesses or not.
+ if (!provider.requesterPays(bucket)) {
+ // update config (just to ease debugging, we're not actually using config.userProject later.
+ HashMap disableUserProject = new HashMap<>();
+ disableUserProject.put("userProject", "");
+ config = CloudStorageConfiguration.fromMap(config, disableUserProject);
+ // update the provider (this is the most important bit)
+ provider = provider.withNoUserProject();
+ }
+ }
+ this.provider = provider;
+ this.config = config;
+ }
+
+ @Override
+ public CloudStorageFileSystemProvider provider() {
+ return provider;
+ }
+
+ /** Returns Cloud Storage bucket name being served by this file system. */
+ public String bucket() {
+ return bucket;
+ }
+
+ /** Returns configuration object for this file system instance. */
+ public CloudStorageConfiguration config() {
+ return config;
+ }
+
+ /** Converts Cloud Storage object name to a {@link Path} object. */
+ @Override
+ public CloudStoragePath getPath(String first, String... more) {
+ checkArgument(
+ !first.startsWith(URI_SCHEME + ":"),
+ "Google Cloud Storage FileSystem.getPath() must not have schema and bucket name: %s",
+ first);
+ return CloudStoragePath.getPath(this, first, more);
+ }
+
+ /**
+ * Does nothing currently. This method might be updated in the future to close all channels
+ * associated with this file system object. However it's unlikely that even then, calling this
+ * method will become mandatory.
+ */
+ @Override
+ public void close() throws IOException {
+ // TODO(#809): Synchronously close all channels associated with this FileSystem instance.
+ }
+
+ /** Returns {@code true}, even if you previously called the {@link #close()} method. */
+ @Override
+ public boolean isOpen() {
+ return true;
+ }
+
+ /** Returns {@code false}. */
+ @Override
+ public boolean isReadOnly() {
+ return false;
+ }
+
+ /** Returns {@value UnixPath#SEPARATOR}. */
+ @Override
+ public String getSeparator() {
+ return Character.toString(UnixPath.SEPARATOR);
+ }
+
+ @Override
+ public Iterable getRootDirectories() {
+ return ImmutableSet.of(CloudStoragePath.getPath(this, UnixPath.ROOT));
+ }
+
+ /**
+ * Returns nothing because Google Cloud Storage doesn't have disk partitions of limited size, or
+ * anything similar.
+ */
+ @Override
+ public Iterable getFileStores() {
+ return ImmutableSet.of();
+ }
+
+ @Override
+ public Set supportedFileAttributeViews() {
+ return SUPPORTED_VIEWS;
+ }
+
+ @Override
+ public PathMatcher getPathMatcher(String syntaxAndPattern) {
+ return FileSystems.getDefault().getPathMatcher(syntaxAndPattern);
+ }
+
+ /**
+ * Throws {@link UnsupportedOperationException} because this feature hasn't been implemented yet.
+ */
+ @Override
+ public UserPrincipalLookupService getUserPrincipalLookupService() {
+ // TODO: Implement me.
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Throws {@link UnsupportedOperationException} because this feature hasn't been implemented yet.
+ */
+ @Override
+ public WatchService newWatchService() throws IOException {
+ // TODO: Implement me.
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ return this == other
+ || other instanceof CloudStorageFileSystem
+ && Objects.equals(config, ((CloudStorageFileSystem) other).config)
+ && Objects.equals(bucket, ((CloudStorageFileSystem) other).bucket);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(bucket);
+ }
+
+ @Override
+ public String toString() {
+ try {
+ // Store GCS bucket name in the URI authority, see
+ // https://github.com/googleapis/java-storage-nio/issues/1218
+ return new URI(URI_SCHEME, bucket, null, null, null).toString();
+ } catch (URISyntaxException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ /**
+ * In order to cache a {@link CloudStorageFileSystemProvider} we track the config used to
+ * instantiate that provider. This class creates an immutable key encapsulating the config to
+ * allow reliable resolution from the cache.
+ */
+ private static final class ProviderCacheKey {
+ private final CloudStorageConfiguration cloudStorageConfiguration;
+ @Nullable private final StorageOptions storageOptions;
+
+ public ProviderCacheKey(
+ CloudStorageConfiguration cloudStorageConfiguration,
+ @Nullable StorageOptions storageOptions) {
+ this.cloudStorageConfiguration =
+ requireNonNull(cloudStorageConfiguration, "cloudStorageConfiguration must be non null");
+ this.storageOptions = storageOptions;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof ProviderCacheKey)) {
+ return false;
+ }
+ ProviderCacheKey that = (ProviderCacheKey) o;
+ return cloudStorageConfiguration.equals(that.cloudStorageConfiguration)
+ && Objects.equals(storageOptions, that.storageOptions);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(cloudStorageConfiguration, storageOptions);
+ }
+
+ @Override
+ public String toString() {
+ return "ConfigTuple{"
+ + "cloudStorageConfiguration="
+ + cloudStorageConfiguration
+ + ", storageOptions="
+ + storageOptions
+ + '}';
+ }
+ }
+}
diff --git a/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileSystemProvider.java b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileSystemProvider.java
new file mode 100644
index 000000000000..b702464c8b6b
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/CloudStorageFileSystemProvider.java
@@ -0,0 +1,1311 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.contrib.nio;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static java.nio.file.attribute.PosixFilePermission.GROUP_EXECUTE;
+import static java.nio.file.attribute.PosixFilePermission.GROUP_READ;
+import static java.nio.file.attribute.PosixFilePermission.GROUP_WRITE;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
+
+import com.google.api.gax.paging.Page;
+import com.google.cloud.storage.Acl;
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BlobId;
+import com.google.cloud.storage.BlobInfo;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.CopyWriter;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.Storage.BlobGetOption;
+import com.google.cloud.storage.Storage.BlobSourceOption;
+import com.google.cloud.storage.Storage.BlobTargetOption;
+import com.google.cloud.storage.StorageException;
+import com.google.cloud.storage.StorageOptions;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.AbstractIterator;
+import com.google.common.net.UrlEscapers;
+import com.google.common.primitives.Ints;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.nio.channels.FileChannel;
+import java.nio.channels.SeekableByteChannel;
+import java.nio.file.AccessMode;
+import java.nio.file.AtomicMoveNotSupportedException;
+import java.nio.file.CopyOption;
+import java.nio.file.DirectoryIteratorException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.DirectoryStream.Filter;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.FileStore;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
+import java.nio.file.attribute.BasicFileAttributeView;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.attribute.FileAttribute;
+import java.nio.file.attribute.FileAttributeView;
+import java.nio.file.attribute.GroupPrincipal;
+import java.nio.file.attribute.UserPrincipal;
+import java.nio.file.spi.FileSystemProvider;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
+import javax.inject.Singleton;
+
+/**
+ * Google Cloud Storage {@link FileSystemProvider} implementation.
+ *
+ *
Note: This class should never be used directly. This class is instantiated by the
+ * service loader and called through a standardized API, e.g. {@link java.nio.file.Files}. However
+ * the javadocs in this class serve as useful documentation for the behavior of the Google Cloud
+ * Storage NIO library.
+ */
+@Singleton
+@ThreadSafe
+public final class CloudStorageFileSystemProvider extends FileSystemProvider {
+
+ private Storage storage;
+ // if null, use StorageOptionsUtil.getDefaultInstance()
+ private final @Nullable StorageOptions storageOptions;
+ // if non-null, we pay via this project.
+ private final @Nullable String userProject;
+
+ // used only when we create a new instance of CloudStorageFileSystemProvider.
+ private static StorageOptions futureStorageOptions = null;
+
+ private static class LazyPathIterator extends AbstractIterator {
+ private final Iterator blobIterator;
+ private final Filter super Path> filter;
+ private final CloudStorageFileSystem fileSystem;
+ private final String prefix;
+ // whether to make the paths absolute before returning them.
+ private final boolean absolutePaths;
+
+ LazyPathIterator(
+ CloudStorageFileSystem fileSystem,
+ String prefix,
+ Iterator blobIterator,
+ Filter super Path> filter,
+ boolean absolutePaths) {
+ this.prefix = prefix;
+ this.blobIterator = blobIterator;
+ this.filter = filter;
+ this.fileSystem = fileSystem;
+ this.absolutePaths = absolutePaths;
+ }
+
+ @Override
+ protected Path computeNext() {
+ while (blobIterator.hasNext()) {
+ Path path = fileSystem.getPath(blobIterator.next().getName());
+ try {
+ if (path.toString().equals(prefix)) {
+ // do not return ourselves, because that confuses recursive descents.
+ continue;
+ }
+ if (filter.accept(path)) {
+ if (absolutePaths) {
+ return path.toAbsolutePath();
+ }
+ return path;
+ }
+ } catch (IOException ex) {
+ throw new DirectoryIteratorException(ex);
+ }
+ }
+ return endOfData();
+ }
+ }
+
+ /**
+ * Sets options that are only used by the constructor.
+ *
+ *
Instead of calling this, when possible use CloudStorageFileSystem.forBucket and pass
+ * StorageOptions as an argument.
+ */
+ @VisibleForTesting
+ public static void setStorageOptions(@Nullable StorageOptions newStorageOptions) {
+ futureStorageOptions = newStorageOptions;
+ }
+
+ /**
+ * Changes the default configuration for every filesystem object created from here on, including
+ * via SPI. If null then future filesystem objects will have the factory default configuration.
+ *
+ *
If options are specified later then they override the defaults. Methods that take a whole
+ * CloudStorageConfiguration (eg. CloudStorageFileSystem.forBucket) will completely override the
+ * defaults. Methods that take individual options (eg.
+ * CloudStorageFileSystemProvier.newFileSystem) will override only these options; the rest will be
+ * taken from the defaults specified here.
+ *
+ *
This is meant to be done only once, at the beginning of some main program, in order to force
+ * all libraries to use some settings we like.
+ *
+ *
Libraries should never call this. If you're a library then, instead, create your own
+ * filesystem object with the right configuration and pass it along.
+ *
+ * @param newDefault new default CloudStorageConfiguration
+ */
+ public static void setDefaultCloudStorageConfiguration(
+ @Nullable CloudStorageConfiguration newDefault) {
+ CloudStorageConfiguration.setUserSpecifiedDefault(newDefault);
+ }
+
+ /**
+ * Default constructor which should only be called by Java SPI.
+ *
+ * @see java.nio.file.FileSystems#getFileSystem(URI)
+ * @see CloudStorageFileSystem#forBucket(String)
+ */
+ public CloudStorageFileSystemProvider() {
+ this(CloudStorageConfiguration.getUserSpecifiedDefault().userProject(), futureStorageOptions);
+ }
+
+ /**
+ * Internal constructor to use the user-provided default config, and a given userProject setting.
+ */
+ CloudStorageFileSystemProvider(@Nullable String userProject) {
+ this(userProject, futureStorageOptions);
+ }
+
+ /**
+ * Internal constructor, fully configurable. Note that null options means to use the system
+ * defaults (NOT the user-provided ones).
+ */
+ CloudStorageFileSystemProvider(
+ @Nullable String userProject, @Nullable StorageOptions gcsStorageOptions) {
+ this.storageOptions =
+ gcsStorageOptions != null
+ ? StorageOptionsUtil.mergeOptionsWithUserAgent(gcsStorageOptions)
+ : null;
+ this.userProject = userProject;
+ }
+
+ // Initialize this.storage, once. This may throw an exception if default authentication
+ // credentials are not available (hence not doing it in the ctor).
+ private void initStorage() {
+ if (this.storage == null) {
+ doInitStorage();
+ }
+ }
+
+ @Override
+ public String getScheme() {
+ return CloudStorageFileSystem.URI_SCHEME;
+ }
+
+ /** Returns Cloud Storage file system, provided a URI with no path, e.g. {@code gs://bucket}. */
+ @Override
+ public CloudStorageFileSystem getFileSystem(URI uri) {
+ initStorage();
+ return newFileSystem(uri, Collections.emptyMap());
+ }
+
+ /**
+ * Returns Cloud Storage file system, provided a URI, e.g. {@code gs://bucket}. The URI can
+ * include a path component (that will be ignored).
+ *
+ * @param uri bucket and current working directory, e.g. {@code gs://bucket}
+ * @param env map of configuration options, whose keys correspond to the method names of {@link
+ * CloudStorageConfiguration.Builder}. However you are not allowed to set the working
+ * directory, as that should be provided in the {@code uri}
+ * @throws IllegalArgumentException if {@code uri} specifies a port, user, query, or fragment, or
+ * if scheme is not {@value CloudStorageFileSystem#URI_SCHEME}
+ */
+ @Override
+ public CloudStorageFileSystem newFileSystem(URI uri, Map env) {
+ checkArgument(
+ uri.getScheme().equalsIgnoreCase(CloudStorageFileSystem.URI_SCHEME),
+ "Cloud Storage URIs must have '%s' scheme: %s",
+ CloudStorageFileSystem.URI_SCHEME,
+ uri);
+ // Bucket names may not be compatible with getHost(), see
+ // https://github.com/googleapis/java-storage-nio/issues/1218
+ // However, there may be existing code expecting the exception message to refer to the bucket
+ // name as the "host".
+ checkArgument(
+ !isNullOrEmpty(uri.getAuthority()),
+ "%s:// URIs must have a host: %s",
+ CloudStorageFileSystem.URI_SCHEME,
+ uri);
+ checkArgument(
+ uri.getPort() == -1
+ && isNullOrEmpty(uri.getQuery())
+ && isNullOrEmpty(uri.getFragment())
+ && isNullOrEmpty(uri.getUserInfo()),
+ "GCS FileSystem URIs mustn't have: port, userinfo, query, or fragment: %s",
+ uri);
+ CloudStorageUtil.checkBucket(uri.getAuthority());
+ initStorage();
+ return new CloudStorageFileSystem(
+ this,
+ uri.getAuthority(),
+ CloudStorageConfiguration.fromMap(
+ CloudStorageFileSystem.getDefaultCloudStorageConfiguration(), env));
+ }
+
+ @Override
+ public CloudStoragePath getPath(URI uri) {
+ initStorage();
+ return CloudStoragePath.getPath(
+ getFileSystem(CloudStorageUtil.stripPathFromUri(uri)), uri.getPath());
+ }
+
+ /** Convenience method: replaces spaces with "%20", builds a URI, and calls getPath(uri). */
+ public CloudStoragePath getPath(String uriInStringForm) {
+ String escaped = UrlEscapers.urlFragmentEscaper().escape(uriInStringForm);
+ return getPath(URI.create(escaped));
+ }
+
+ /**
+ * Open a file for reading or writing. To read receiver-pays buckets, specify the
+ * BlobSourceOption.userProject option.
+ *
+ * @param path: the path to the file to open or create
+ * @param options: options specifying how the file is opened, e.g. StandardOpenOption.WRITE or
+ * BlobSourceOption.userProject
+ * @param attrs: (not supported, values will be ignored)
+ * @return
+ * @throws IOException
+ */
+ @Override
+ public SeekableByteChannel newByteChannel(
+ Path path, Set extends OpenOption> options, FileAttribute>... attrs) throws IOException {
+ checkNotNull(path);
+ initStorage();
+ CloudStorageUtil.checkNotNullArray(attrs);
+ if (options.contains(StandardOpenOption.WRITE)) {
+ // TODO: Make our OpenOptions implement FileAttribute. Also remove buffer option.
+ return newWriteChannel(path, options);
+ } else {
+ return newReadChannel(path, options);
+ }
+ }
+
+ /**
+ * Open a file for reading OR writing. The {@link FileChannel} that is returned will only allow
+ * reads or writes depending on the {@link OpenOption}s that are specified. If any of the
+ * following have been specified, the {@link FileChannel} will be write-only: {@link
+ * StandardOpenOption#CREATE}
+ *
+ *
NOTE: Cloud Storage uses a flat namespace and therefore doesn't support real
+ * directories. So this library supports what's known as "pseudo-directories". Any path that
+ * includes a trailing slash, will be considered a directory. It will always be assumed to exist,
+ * without performing any I/O. This allows you to do path manipulation in the same manner as you
+ * would with the normal UNIX file system implementation. You can disable this feature with {@link
+ * com.google.cloud.storage.contrib.nio.CloudStorageConfiguration#usePseudoDirectories()}.
+ *
+ *
Non-SPI Interface
+ *
+ *
If you don't want to rely on Java SPI, which requires a META-INF file in your jar generated by
+ * Google Auto, you can instantiate this file system directly as follows:
+ *
+ *
For the complete source code see
+ * CreateCloudStorageFileSystem.java.
+ */
+@javax.annotation.ParametersAreNonnullByDefault
+package com.google.cloud.storage.contrib.nio;
diff --git a/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java
new file mode 100644
index 000000000000..08f485385fb8
--- /dev/null
+++ b/java-storage-nio/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java
@@ -0,0 +1,765 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.contrib.nio.testing;
+
+import com.google.api.client.http.HttpRequestInitializer;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.http.LowLevelHttpRequest;
+import com.google.api.client.http.LowLevelHttpResponse;
+import com.google.api.client.json.gson.GsonFactory;
+import com.google.api.client.testing.http.MockHttpTransport;
+import com.google.api.client.testing.http.MockLowLevelHttpRequest;
+import com.google.api.client.testing.http.MockLowLevelHttpResponse;
+import com.google.api.client.util.DateTime;
+import com.google.api.services.storage.model.Bucket;
+import com.google.api.services.storage.model.ServiceAccount;
+import com.google.api.services.storage.model.StorageObject;
+import com.google.cloud.Tuple;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageException;
+import com.google.cloud.storage.spi.v1.StorageRpc;
+import com.google.cloud.storage.testing.StorageRpcTestBase;
+import com.google.common.base.Preconditions;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.net.URLDecoder;
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileAlreadyExistsException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.annotation.concurrent.NotThreadSafe;
+
+/**
+ * A bare-bones in-memory implementation of StorageRpc, meant for testing.
+ *
+ *
This class is not thread-safe. It's also (currently) limited in the following ways:
+ *
+ *
+ *
Supported
+ *
+ *
object create
+ *
object get
+ *
object delete
+ *
list the contents of a bucket
+ *
+ *
Unsupported
+ *
+ *
bucket create
+ *
bucket get
+ *
bucket delete
+ *
list all buckets
+ *
generations
+ *
file attributes
+ *
patch
+ *
continueRewrite
+ *
createBatch
+ *
checksums, etags
+ *
IAM operations
+ *
BucketLock operations
+ *
HMAC key operations
+ *
+ *
+ */
+@NotThreadSafe
+class FakeStorageRpc extends StorageRpcTestBase {
+
+ private static final SimpleDateFormat RFC_3339_FORMATTER =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+
+ private static final int OK = 200;
+ private static final int PARTIAL_CONTENT = 206;
+ private static final int NOT_FOUND = 404;
+ private static final byte[] EMPTY_BYTES = new byte[0];
+
+ // fullname -> metadata
+ Map metadata = new ConcurrentHashMap<>();
+ // fullname -> contents
+ Map contents = new ConcurrentHashMap<>();
+ // fullname -> future contents that will be visible on close.
+ Map futureContents = new ConcurrentHashMap<>();
+
+ private final boolean throwIfOption;
+
+ /**
+ * @param throwIfOption if true, we throw when given any option
+ */
+ public FakeStorageRpc(boolean throwIfOption) {
+ this.throwIfOption = throwIfOption;
+ }
+
+ // remove all files
+ void reset() {
+ metadata = new ConcurrentHashMap<>();
+ contents = new ConcurrentHashMap<>();
+ }
+
+ @Override
+ public StorageObject create(StorageObject object, InputStream content, Map