The first release of google-cloud-storage with support for a subset of the Google Cloud Storage gRPC API which is in private preview. The most common operations have all been implemented and are available for experimentation.
Given not all public api surface of google-cloud-storage classes are supported for gRPC a new annotation @TransportCompatibility has been added to various classes, methods and fields/enum values to signal where that thing can be expected to work. As we implement more of the operations these annotations will be updated.
All new gRPC related APIs are annotated with @BetaApi to denote they are in preview and the possibility of breaking change is present. At this time, opting to use any of the gRPC transport mode means you are okay with the possibility of a breaking change happening. When the APIs are out of preview, we will remove the @BetaApi annotation to signal they are now considered stable and will not break outside a major version.
NOTICE: Using the gRPC transport is exclusive. Any operations which have not yet been implemented for gRPC will result in a runtime error. For those operations which are not yet implemented, please continue to use the existing HTTP transport.
For all gRPC media related operations (upload/download) we are now more resource courteous then the corresponding HTTP counterpart. Buffers are fixed to their specified size (can't arbitrarily grow without bounds), are allocated lazily and only if necessary.
Investigation into the possibility of backporting these improvements to the HTTP counterparts is ongoing
Preview support for Accessing GCS via gRPC
Set the environment variable GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS=true, then run your program.
When configuring your StorageOptions mimic the following:
Internally the default host endpoint https://storage.googleapis.com:443 will be transformed to the applicable google-c2p-experimental:///storage.googleapis.com
Support for java.time types on model classes
Points in time are now represented with java.time.OffsetDateTime, while durations are represented with java.time.Duration
All existing Long centric methods are still present, but have been deprecated in favor of their corresponding java.time variant
At the next major version, these deprecated methods will be replaced with types from java.time and the java.time variant methods will be deprecated
com.google.cloud.storage.Storage now extends java.lang.AutoClosable thereby allowing it to be used in a try-with-resource block.
When using gRPC transport be sure to call Storage#close() when complete so it can clean up the gRPC middleware and resources.
When using HTTP transport calling Storage#close() will gracefully no-op, allowing for the same style of use regardless of transport.
When downloading an object via gRPC idle stream detection is now present which will restart a stream if it is determined to be idle and has remaining retry budget
Update equals()/hashCode() methods to follow the expected contract
The new gRPC transport based implementation continues to provide idempotency aware automatic retries the same as HTTP
Expanded test suite which should bring improved stability and reliability to both HTTP and gRPC transport implementations
New com.google.cloud:google-cloud-storage-bom maven bom available to use for coordinated dependency version resolution for multiple storage artifacts
Not yet implemented
All ACL specific operations.
These will be implemented in the near future
In the interim, reading and setting of ACLs and Default Object ACLs can be performed via Object/Bucket operations
The first release of google-cloud-storage with support for a subset of the Google Cloud Storage gRPC API which is in private preview. The most common operations have all been implemented and are available for experimentation.
Given not all public api surface of google-cloud-storage classes are supported for gRPC a new annotation @TransportCompatibility has been added to various classes, methods and fields/enum values to signal where that thing can be expected to work. As we implement more of the operations these annotations will be updated.
All new gRPC related APIs are annotated with @BetaApi to denote they are in preview and the possibility of breaking change is present. At this time, opting to use any of the gRPC transport mode means you are okay with the possibility of a breaking change happening. When the APIs are out of preview, we will remove the @BetaApi annotation to signal they are now considered stable and will not break outside a major version.
NOTICE: Using the gRPC transport is exclusive. Any operations which have not yet been implemented for gRPC will result in a runtime error. For those operations which are not yet implemented, please continue to use the existing HTTP transport.
For all gRPC media related operations (upload/download) we are now more resource courteous then the corresponding HTTP counterpart. Buffers are fixed to their specified size (can't arbitrarily grow without bounds), are allocated lazily and only if necessary.
Investigation into the possibility of backporting these improvements to the HTTP counterparts is ongoing
Preview support for Accessing GCS via gRPC
Set the environment variable GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS=true, then run your program.
When configuring your StorageOptions mimic the following:
Internally the default host endpoint https://storage.googleapis.com:443 will be transformed to the applicable google-c2p-experimental:///storage.googleapis.com
Support for java.time types on model classes
Points in time are now represented with java.time.OffsetDateTime, while durations are represented with java.time.Duration
All existing Long centric methods are still present, but have been deprecated in favor of their corresponding java.time variant
At the next major version, these deprecated methods will be replaced with types from java.time and the java.time variant methods will be deprecated
com.google.cloud.storage.Storage now extends java.lang.AutoClosable thereby allowing it to be used in a try-with-resource block.
When using gRPC transport be sure to call Storage#close() when complete so it can clean up the gRPC middleware and resources.
When using HTTP transport calling Storage#close() will gracefully no-op, allowing for the same style of use regardless of transport.
When downloading an object via gRPC idle stream detection is now present which will restart a stream if it is determined to be idle and has remaining retry budget
Update equals()/hashCode() methods to follow the expected contract
The new gRPC transport based implementation continues to provide idempotency aware automatic retries the same as HTTP
Expanded test suite which should bring improved stability and reliability to both HTTP and gRPC transport implementations
New com.google.cloud:google-cloud-storage-bom maven bom available to use for coordinated dependency version resolution for multiple storage artifacts
Not yet implemented
All ACL specific operations.
These will be implemented in the near future
In the interim, reading and setting of ACLs and Default Object ACLs can be performed via Object/Bucket operations
All Notification related operations
These will be implemented in the near future
In the interim, please continue to use the HTTP transport
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps google-cloud-storage from 2.13.1 to 2.14.0.
Release notes
Sourced from google-cloud-storage's releases.
... (truncated)
Changelog
Sourced from google-cloud-storage's changelog.
... (truncated)
Commits
69c842d
chore(main): release 2.14.0 (#1728)efddab2
test(deps): update dependency net.jqwik:jqwik to v1.7.0 (#1739)95d7ad9
feat: initial preview implementation of Storage over gRPC (#1740)9b2d446
chore: cleanup repo settings for branch feat/grpc-storage post merge7c0a8e5
Merge branch 'main' into feat/grpc-storage7ff0591
build: add com.google.cloud:google-cloud-storage-bom (#1731)c3f8cb3
test(deps): update kms.version to v0.99.0 (#1735)04e5166
fix: properly implement GrpcBlobReadChannel#isOpen (#1733)d247886
chore: [java] remove flatten plugin dependency check (#1663) (#1732)d5e937f
Merge branch 'main' into feat/grpc-storageDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)