2022-02-15: retiring legacy targets and rules
- In 2022-02-15 (or around that time) we are planning to remove a number of
backwards compatibility targets names for Bazel and CMake. Specifically:
- Bazel Users: applications should use the targets at the top-level
directory, e.g.
//:bigtable
, or//:pubsub
.- All other Bazel targets will be marked as package private in or around 2022-02-15.
- CMake Users: applications should use the
google-cloud-cpp::*
targets (e.g.google-cloud-cpp::pubsub
).- The legacy CMake targets generate warnings if using CMake >= 3.18 (the earliest version that supports deprecation warnings).
- All exported targets without a
google-cloud-cpp::
prefix will be retired in or around 2022-02-15. These include, but are not limited to:- Any target starting with
googleapis-c++::
- Any exported targets without a prefix, including:
google_cloud_cpp_common
,google_cloud_cpp_grpc_utils
,bigtable_client
,bigtable_protos
,firestore_client
,pubsub_client
,storage_client
,spanner_client
. - Some target aliases, including
bigtable::client
,bigtable::protos
,firestore::client
- Any target starting with
- pkg-config users: applications should use the modules starting with
google_cloud_cpp
- All other modules will be retired in or around 2022-02-15
- Direct users of -l${library} flags: we do not recommend that
applications uses
-l
flags directly, please usepkg-config
and/or the target names under CMake or Bazel. We make this recommendation because we do not know of any mechanism to provide backwards compatibility for such flags. - If you have any feedback about this change please add comments in #5726
- Bazel Users: applications should use the targets at the top-level
directory, e.g.
2022-04-01: retiring legacy IAM functions
- On 2022-04-01 (or shortly after) we are planning to remove a number of IAM functions designed before IAM conditions. These functions do not work with IAM policies that include IAM conditions, and have been marked as deprecated since before 2019-08-01, albeit in Doxygen comments only. Starting with the v1.25.0 release, and depending on your compiler settings, using these functions may issue a deprecation warning at the call site. See #5929 for more details.
2022-10-01: retiring legacy Spanner admin APIs
- On 2022-10-01 (or shortly after) we are planning to remove the hand-written
versions of the Spanner admin APIs. These have been superseded by versions
generated automatically from the service definitions. The new APIs can be
found in the
google/cloud/spanner/admin
tree and within thegoogle::cloud::spanner_admin
namespace. Starting with the v1.32.0 release, and depending on your compiler settings, using these classes/functions may elicit a deprecation warning. See #7356 for more details.
2022-11-01: remove `v1` and `gcpcxxV1` backward compatibility aliases
- On 2022-11-01 (or shortly after) we will remove the inline namespace aliases
of
v1
andgcpcxxV1
that are declared ingoogle/cloud/version.h
. These aliases exist because we changed the format of our inline namespace name to include the major, minor, and patch numbers for each release, and we didn't want to break users. Our Doxygen documentation was mistakenly recommending that users include the inline namespace names in their code, but this was also fixed to now recommend against doing so. Users should generally omit the name of our versioned inline namespace name because that will tightly couple their code to a specific release, and will make upgrading to newer versions more difficult. Instead, users should simply omit the inline namespace name, for example, instead ofusegoogle::cloud::v1::Status
google::cloud::Status
. Please update your code to avoid naming thev1
andgcpcxxV1
inline namespace names before 2022-11-01. For more info, see googleapis#7463 and googleapis#5976.
2023-02-01: remove `BigQueryReadReadRowsStreamingUpdater` from `google::cloud::bigquery` namespace
- On 2023-02-01 (or shortly after) we will remove
BigQueryReadReadRowsStreamingUpdater
from its declaration ingoogle/cloud/bigquery/read_connection.h
and from thegoogle::cloud::bigquery
namespace. The function continues to exist but in an internal file and namespace. For status on this see googleapis#8234.
The library has been expanded to include the following services:
BREAKING CHANGE: The bigtable::TableAdminClient
interface has changed
significantly. Any code that extends this class or calls its experimental public
APIs (reset()
, Channel()
) will be broken. For the most part, this should
only affect customers who mock this class in their tests. Code that calls
bigtable::MakeAdminClient()
or bigtable::CreateDefaultAdminClient()
will
continue to work as before.
This change will allow us to deliver new features more quickly by reducing the
maintenance costs of the library. It also provides a better mocking interface
for bigtable::TableAdmin
. We apologize if you are inconvenienced by this
change.
If only your tests are broken, please use
bigtable_admin_mocks::MockBigtableTableAdminConnection
in place of
bigtable::testing::MockAdminClient
. The new mock should be more intuitive
because of the differences described below:
MockBigtableTableAdminConnection |
MockAdminClient |
---|---|
Mocks result of entire retry loop | Mocks result of one call in a retry loop |
Returns familiar google::cloud:: types |
Returns grpc:: types |
If more than your tests are broken, please use
bigtable_admin::BigtableTableAdminClient
in favor of bigtable::TableAdmin
,
and bigtable_admin::BigtableTableAdminConnection
in favor of
bigtable::AdminClient
. These classes will incorporate the newest features of
both the Cloud Bigtable Admin API and the C++ client library. For more
information on these new classes, see our Architecture Design document.
Again, we apologize for making this breaking change, but we believe it is in the best long-term interest of our customers.
We are introducing client libraries for more (TBD) GCP services. While we do not anticipate any API changes to these libraries before declaring them GA, we are releasing them early in case they elicit some feedback that requires changes.
Expand to see the full list of new libraries...
BREAKING CHANGE: We stopped testing with Bazel 3.5 and moved most of our
Bazel tests to Bazel 4.0, which is now our minimum supported Bazel version. We
also added a bazel-latest
build to ensure that we always work with the newest
Bazel release (currently 5.0). For more details on the changes, see #8095 and
#8099. For more info about Bazel, see https://bazel.build/.
- feat(generator): merge connection options into client options (#8158)
- feat(generator): connection respects per call policies (#8013)
- fix: add mock library aliases (#7844)
BREAKING CHANGE: The bigtable::InstanceAdminClient
interface has changed
significantly. Any code that extends this class or calls its experimental public
APIs (reset()
, Channel()
) will be broken. For the most part, this should
only affect customers who mock this class in their tests. Code that calls
bigtable::MakeInstanceAdminClient()
or
bigtable::CreateDefaultInstanceAdminClient()
will continue to work as before.
This change will allow us to deliver new features more quickly by reducing the
maintenance costs of the library. It also provides a better mocking interface
for bigtable::InstanceAdmin
. We apologize if you are inconvenienced by this
change.
If only your tests are broken, please use
bigtable_admin_mocks::MockBigtableInstanceAdminConnection
in place of
bigtable::testing::MockInstanceAdminClient
. The new mock should be more
intuitive because of the differences described below:
MockBigtableInstanceAdminConnection |
MockInstanceAdminClient |
---|---|
Mocks result of entire retry loop | Mocks result of one call in a retry loop |
Returns familiar google::cloud:: types |
Returns grpc:: types |
If more than your tests are broken, please use
bigtable_admin::BigtableInstanceAdminClient
in favor of
bigtable::InstanceAdmin
, and bigtable_admin::BigtableInstanceAdminConnection
in favor of bigtable::InstanceAdminClient
. These classes will incorporate the
newest features of both the Cloud Bigtable Admin API and the C++ client
library. For more information on these new classes, see our
Architecture Design document.
Again, we apologize for making this breaking change, but we believe it is in the best long-term interest of our customers.
OTHER CHANGES:
- fix(generator): fix options handling in SetIamPolicy() OCC loop (#8203)
- feat(bigtable): cheap Admin creation with different resource name (#8194)
- feat(bigtable): cheap Table creation with different resource name (#8172)
- feat(generator): merge connection options into client options (#8158)
- feat(generator): connection respects per call policies (#8013)
- fix(bigtable): polling policy clones initial state (#7854)
- fix: add mock library aliases (#7844)
- fix(generator): fix options handling in SetIamPolicy() OCC loop (#8203)
- feat(generator): merge connection options into client options (#8158)
- feat(generator): connection respects per call policies (#8013)
- fix: add mock library aliases (#7844)
- fix(generator): fix options handling in SetIamPolicy() OCC loop (#8203)
- feat(generator): merge connection options into client options (#8158)
- feat(generator): connection respects per call policies (#8013)
- fix: add mock library aliases (#7844)
- fix: add mock library aliases (#7844)
- fix(generator): fix options handling in SetIamPolicy() OCC loop (#8203)
- feat(generator): merge connection options into client options (#8158)
- feat(generator): connection respects per call policies (#8013)
- fix: add mock library aliases (#7844)
- fix(generator): fix options handling in SetIamPolicy() OCC loop (#8203)
- feat(generator): merge connection options into client options (#8158)
- feat(spanner): merge connection options into client options (#8090)
- fix(spanner): apply policy options in (generated) client ctor (#8064)
- feat(generator): connection respects per call policies (#8013)
- fix: add mock library aliases (#7844)
- feat(spanner): support unified credentials (#7824)
BREAKING CHANGE: with this release any use of the
storage::internal::ResumableUploadResponse
type requires changes. Applications
should have little need for this type, outside mocks, so the changes should not
affect production code.
Nevertheless, we apologize for the inconvenience, and while we would have preferred to avoid breaking changes, it was inevitable to introduce some breaking changes to fix a data loss bug (see #7835).
If you are affected by this change, you will need to change your tests following
this guide. Any place where you return a ResumableUploadResponse
needs to
change from:
storage::internal::ResumableUploadResource{
/*upload_session_url=*/std::string{"typically-unused"},
/*last_committed_byte=*/std::uint64_t{value},
/*payload=*/absl::nullopt, // or some gcs::ObjectMetadata value
/*upload_state=*/ResumableUploadResponse::kInProgress, // or kDone
/*annotations=*/std::string{"typically-unused"}
}
to:
storage::internal::ResumableUploadResource{
/*upload_session_url=*/std::string{"typically-unused"},
/*upload_state=*/ResumableUploadResponse::kInProgress, // or kDone
/*committed_size=*/value + 1, // or absl::nullopt
/*payload=*/absl::nullopt, // or some gcs::ObjectMetadata value
/*annotations=*/std::string{"typically-unused"}
}
That is, you need to re-order the fields and increase the value
to reflect
the number of committed bytes vs. the index in the last committed byte.
Changing the order of the fields was intentional. It will create a build failure, which is easier to detect and repair than a run-time error in your tests.
OTHER CHANGES:
- fix(storage): missing options in UpdateObject() (#8193)
- fix(storage): missing kms key option in CopyObject() (#8188)
- fix(storage): missing option for CopyObject() (#8171)
- fix(storage): add missing options for PatchObject() (#8137)
- feat(storage): per-upload buffer size configuration (#8096)
- fix(storage): improve JSON validation (#8033)
- fix(storage)!: handle missing range header in uploads (#7877)
- cleanup(storage)!: uploads track committed_size (#7868)
- fix(generator): fix options handling in SetIamPolicy() OCC loop (#8203)
- feat(generator):
*Client
with bidir streaming RPCs (#8187) - feat(generator): merge connection options into client options (#8158)
- feat(generator): better metadata decorators for bidir streaming RPCs (#8077)
- feat(generator): connection respects per call policies (#8013)
- feat(pubsublite): add TopicStats service (#7966)
- fix(generator): bidir streaming RPCs improvements (#7937)
- feat(generator): support bidir streams in Connection (#7933)
- fix(common): polling policy clones initial state (#7858)
- fix: add mock library aliases (#7844)
We are introducing client libraries for many (>50) GCP services. While we do not anticipate any API changes to these libraries before declaring them GA, we are releasing them early in case they elicit some feedback that requires changes.
Expand to see the full list of new libraries...
- Access Approval
- Access Context Manager
- Anthos GKE API
- API Gateway
- App Engine Admin API
- Artifact Registry
- Assured Workloads
- AutoML
- Binary Authorization
- Certificate Authority Service
- Channel Services
- Cloud Asset Inventory
- Cloud Billing
- Cloud Build
- Cloud Composer
- Cloud Data Loss Prevention (DLP)
- Cloud Debugger
- Cloud Functions
- Cloud Intrusion Detection System (IDS)
- Cloud IoT
- Cloud Key Management Service (KMS)
- Cloud Scheduler
- Cloud Shell
- Cloud TPU
- Cloud Trace
- Cloud Translation
- Cloud Vision
- Compute Engine OS Config
- Compute Engine OS Login
- Connectivity Tests
- Container Analysis
- Database Migration Service (DMS)
- Eventarc
- Filestore
- Game Servers
- Google Kubernetes Engine (GKE)
- Identity-Aware Proxy (IAP)
- Memorystore for Memcached
- Memorystore for Redis
- Migrate for Compute Engine
- Organization Policy Service
- Policy Troubleshooter
- Recommender
- Resource Manager
- Retail
- Security Command Center
- Serverless VPC Access
- Service Control
- Service Directory
- Service Management
- Service Usage
- Storage Transfer Service
- Talent Solution
- Text-to-Speech
- Vertex AI Workbench
- Video Intelligence API
- Web Risk
- Web Security Scanner
- Workflows
The following libraries are now considered stable and complete:
- feat(generator): add options support to generated clients (#7683)
- feat(bigtable): generate admin APIs (#7700)
- feat(generator): add options support to generated clients (#7683)
- fix(pubsub): Change AsyncReadWriteStreamAuth to be usable with unique_ptr (#7692)
- fix(spanner): switch order of ListBackupOperations() filter conjuncts (#7746)
- feat(spanner): add per-operation options to Commit() and Rollback() (#7714)
- feat(spanner): spanner::Client construction from Options (#7706)
- feat(generator): add options support to generated clients (#7683)
- feat(GCS+gRPC): implement parser for BucketMetadata components (#7766)
- feat(GCS+gRPC): implement BucketBilling parser (#7765)
- feat(GCS+gRPC): implement BucketAccessControl parser (#7763)
- feat(storage): capture metadata info in downloads (#7694)
- fix: missing dependency for WIN32 (#7718)
- fix(storage): more strict parsing for HttpResponse (#7702)
- Backoff policies are now cloned from their initial state, instead of their current state. Any accumulated delay will be reset to its initial value in the clone. The previous behavior was a bug, and thus it has been fixed. (#7696)
- fix: extremely rare race conditions in retry loop (#7789)
- feat(common): include the request/response type name in the RPC log (#7782)
- fix(common): revamp the async polling loop (#7762)
- fix: missing dependency for WIN32 (#7718)
- doc(common): add a note about AsyncGrpcOperation and OptionsSpan (#7682)
- feat(common): add support for call-tree-specific options (#7669)
Generally we improved the quality of the generated documentation, including:
- feat(generator): document details about
*Client
(#7673) - feat(generator): link each method input and output types (#7665)
- feat(bigtableadmin): add multi-cluster routing for specific clusters (#7636)
- feat(generator): document details about
*Client
(#7673) - feat(generator): link each method input and output types (#7665)
- fix(spanner): GetSingularRow accepts by value (#7589)
- fix(spanner): avoid use-after-move bugs (#7588)
- docs(spanner): no doxygen for admin_internal (#7552)
- feat(storage): better debugging for session rewinds (#7662)
- feat(storage): separate option for download timeouts (#7655)
- feat: GCS parse "error info" from JSON when available (#7654)
- doc(storage): describe connection pool (#7637)
- feat(storage):
storage::Client
is a value type (#7634) - feat(storage): default payload format for CreateNotification (#7633)
- feat(generator): more stable googleapis proto links (#7606)
- feat(GCS+gRPC): endpoint overrides with secure credentials (#7572)
- feat(GCS+gRPC): synthetic object metadata links (#7563)
- fix(GCS+gRPC): correct format Object ids (#7559)
- feat: expose and log ErrorInfo if present (#7640)
- feat(common): add tracing for the LRO polling loop (#7615)
- feat(common): add internal-only payload support to Status (#7603)
We are introducing client libraries for Cloud Tasks, Secret Manager, and Pub/Sub Lite. These libraries are still under development.
⚠️ In this release we have stopped testing with Ubuntu:16.04 as this distribution is no longer supported by Google Cloud. We will gladly consider, but do not commit to accepting, patches to fix build problems on the platform.
ATTENTION: Our Doxygen documentation (e.g. Storage
docs) was incorrectly showing the versioned inline namespace
name for our symbols (it was v1
), implicitly suggesting that users should
spell this inline namespace in their own code. This has been corrected. Our
Doxygen documentation no longer shows the versioned inline namespace name;
instead, it shows users how to correctly spell our symbol names without
referencing the versioned inline namespace.
- feat: create relocatable pkg-config files (#7481)
- doc: remove inline namespace from doxygen (#7461)
- fix(bigtable): retry internal errors known to be transient (#7395)
BREAKING CHANGE: The experimental Firestore support library that used to
live in this repo at google/cloud/firestore
has been removed in favor of the
canonical library at https://firebase.google.com/docs/reference/cpp. For more
info see #7443.
- cleanup(firestore)!: removes the experimental firestore library (#7468)
- feat: create relocatable pkg-config files (#7481)
- fix(generator): add doxygen return comment for StreamRanges (#7419)
- feat: create relocatable pkg-config files (#7481)
- doc: remove inline namespace from doxygen (#7461)
- feat(pubsub): implement GUAC (#7449) (#7440) (#7436) (#7432) (#7428)
- feat: create relocatable pkg-config files (#7481)
- doc: remove inline namespace from doxygen (#7461)
- fix(generator): add doxygen return comment for StreamRanges (#7419)
- fix(storage): respect ContentType in Client::UploadFile (#7521)
- doc: remove inline namespace from doxygen (#7461)
- fix(storage): prevent crashes on double Close() (#7390)
- feat(storage): add bucket attributes for RPO (#7384)
- doc(storage): 'unspecified' value for PAP is deprecated (#7377)
- doc(storage): label
ClientOptions
as deprecated (#7511)
- fix(common): fewer crashes with dynamic loading (#7512)
- feat: create relocatable pkg-config files (#7481)
- fix(common): resume sending "v" in "gccl" component of API header (#7473)
- doc: remove inline namespace from doxygen (#7461)
- feat(common): adds begin/end inline namespace macros (#7456)
- feat(common): GUAC for async read-write streams (#7442)
- fix(pubsub): respect non-default values in
pubsub::ConnectionOptions
(#7406)
- docs(bigtable): add documentation for no channel refreshes (#7373)
- feat(generator): generate a SetIamPolicy() overload with an OCC loop (#7276)
- doc(iam): use SetIamPolicy() read-modify-write loop in sample (#7288)
- feat(pubsub): use
google::cloud::Options
to configure the library.pubsub::PublisherOptions
,pubsub::SubscriberOptions
, and related functions are deprecated. We have not set a date to remove them, but if we ever do we plan to give you one year's notice. - fix(pubsub): avoid deadlocks in publish flow control (#7313)
- fix(pubsub): dont std::move PublisherOptions that we are still using (#7270)
BREAKING CHANGES:
- We have removed the code generated from
storage/v1
protos. These protos were not GA themselves, and the underlying service will be disabled in the near future. Furthermore, the library that used them (the GCS+gRPC plugin) is clearly labeledexperimental
. Regardless, we apologize if this causes you inconvenience or additional work.
OTHER CHANGES:
- fix(storage): eliminate dangling function references (#7366)
- doc: add gRPC steps to storage quickstart (#7358)
- fix(storage): restore deprecation warnings on MSVC (#7325)
- fix(storage): build with MSVC+x86 (#7323)
- feat(GCS+gRPC): reduce data copying in downloads (#7303)
- feat(GCS+gRPC): support timeouts for all requests (#7299)
- feat(storage): support timeouts for all requests (#7295)
- feat(storage): use generic parameters when resuming uploads (#7292)
- feat(GCS+gRPC): implement standard parameters (#7272)
- fix(storage): use CA info options in credentials (#7261)
- doc(storage): handle kNotFound in example (#7252)
- feat(generator): generate a SetIamPolicy() overload with an OCC loop (#7276)
- feat(spanner): add factory functions for instance/database/backup (#7321)
- doc(spanner): convert Spanner samples to use the generated admin APIs (#7311)
- feat(spanner): add generated admin APIs (#7285)
- fix: substitute build metadata (git commit) in bazel builds (#7378)
- feat(common): add ability to supply a user-run CQ to gRPC options (#7354)
- fix(storage): use CA info options in credentials (#7263)
- feat(generator): add default tracing components and options (#7219)
- feat(bigtable): add Make(Data,Admin,InstanceAdmin)Client methods that take Options (#7226)
- feat(generator): add default tracing components and options (#7219)
- feat(pubsub): support Topic retention duration (#7196)
- fix: release CurlRequest handles on error (#7244)
- feat(storage): add additional examples (#7224)
- feat(storage): aggregate upload benchmark (#7190)
- fix(GCS+gRPC): quickstart build with Bazel+Windows (#7147)
- fix(storage): release handles for oauth2 refresh (#7136)
- fix(GCS+gRPC): return status on stream closure (#7128)
- feat(storage): make benchmark more robust on stalls (#7113)
- feat(GCS+gRPC): timeout downloads in benchmark (#7112)
- feat(GCS+gRPC): initial support for download timeouts (#7108)
- feat(spanner): support for JSON as a column type (#7212)
- feat(spanner): tagging support (#7154)
- feat(spanner): send session-refresh request at low priority (#7140)
- fix(spanner): fix Client::OverlayQueryOptions() to merge correctly (#7118)
BREAKING CHANGES:
google::cloud::StatusOr<T>
had an accessor that returned an lvalue reference to non-constStatus
, this allowed callers to modify the containedStatus
and break invariants of theStatusOr
class. This function was removed. If your code previously relied onsor.status() = new_status
you should change it tosor = new_status
. (#7150)
OTHER CHANGES:
- feat(common): add GrpcChannelArgumentsNativeOption (#7194)
- feat(common): capture thread that creates log record (#7119)
- Support both google-cloud-cpp::bigquery and deprecated google-cloud-cpp::experimental-bigquery targets.
- Support both google-cloud-cpp::iam and deprecated google-cloud-cpp::experimental-iam targets.
- BigQuery Storage -- The BigQuery Storage library is now GA.
- IAM -- The IAM library is now GA.
BREAKING CHANGES:
Async*
functions inTable
that tookCompletionQueue&
as a parameter have been removed. Users that need to update their code should use the identically named functions which do not require aCompletionQueue&
. If users absolutely require a customCompletionQueue
, one can be supplied to theDataClient
used to construct theTable
, viaClientOptions::DisableBackgroundThreads(CompletionQueue const&)
. See #2567 for more details.
OTHER CHANGES:
- The
MutationBatcher
's default setting for max mutations per batch was reduced from 100k to 1k. The new value achieves better throughput and avoids errors from exhausting the server. ([#7095][googleapis#7095])
BREAKING CHANGES:
- The usage of
google::cloud::internal::ObjectReadSource
has changed. If your tests mock how the library uses this class you may need to update your tests. We updated the mocking examples to guide you in changing the tests.
OTHER CHANGES:
- feat(storage): discard handles after an error (#7088)
- feat(storage): release download handles sooner (#7085)
- feat(storage): support setting HTTP version (#7077)
- fix(storage): cleanup interrupted downloads (#7064)
- fix(storage): avoid crashes after move (#7045)
- feat(GCS+gRPC): upload checksums with last chunk (#7031)
- fix(storage): use hash values in InsertObject() (#7025)
- feat(storage): capture peer address for REST (#6994)
- feat(GCS+gRPC): option to configure plugin (#6991)
- feat(GCS+gRPC): checksums on ObjectInsert (#6967)
- fix(GCS+gRPC): no hashes in Object resource (#6963)
- feat(common): always clog GCP_LOG(FATAL) messages (#7087)
- feat(common): make GCP_LOG(FATAL) terminate execution (#7058)
We have removed the super/
directory: google-cloud-cpp
remains usable in
a super build for a larger project, but we do not believe these files add enough
value for the additional complexity. If you prefer to build all the dependencies
from source using CMake, we recommend you use a package manager, such as
vcpkg.
We have dropped support for Clang < 6.0: to support the latest Google Cloud
services we need a version of Protobuf that can compile all the .proto
files
in https://github.com/googleapis/googleapis. At this time this requires
Protobuf >= 3.15, and these versions of Protobuf do not support older versions
of the Clang compiler.
BREAKING CHANGES:
- Experimental functions matching
Async*
inbigtable::TableAdmin
andbigtable::InstanceAdmin
have been removed from the public API. See #5923 for more details.
Other changes:
- feat(bigtable): add Backup IAM Policy snippets (#6847)
- doc(bigtable): revamp examples README (#6839)
- docs: fix connection pool size for samples (#6834)
- cleanup(doc): add IAM examples to Bigtable gRPC doc, fix typos (#6838)
- cleanup(bigtable)!: remove admin async methods from public API (#6711)
- fix: cast to std::string which works with string and Cord (#6850)
- doc(pubsub): an example for publisher flow control (#6784)
- feat(pubsub): flow control for Publisher (#6678)
- feat(pubsub): use unary RPCs for Ack/Nack (#6674)
- feat(pubsub): direct Ack/Nack through SubscriberStub (#6666)
- fix(storage): allow overwrites in parallel uploads (#6908)
- feat(GCS+gRPC): capture streaming RPCs metadata (#6902)
- fix(storage): use correct header for XML pre-conditions (#6903)
- fix(storage): use JSON for reads with pre-conditions (#6900)
- fix(storage): treat 304 errors as kFailedPrecondition (#6897)
- feat(storage): micro-optimization for downloads (#6892)
- fix(GCS+gRPC): avoid duplicate headers in downloads (#6891)
- feat(storage): implement "public access prevention" (#6755)
- fix(GCS+gRPC): resumable uploads can resume (#6881)
- feat(storage): share client in throughput benchmark (#6882)
- feat(storage): make auto-finalization optional (#6874)
- fix(storage): alternative endpoints and Host header (#6864)
- fix(storage): crashes with tracing enabled (#6870)
- feature(spanner): low-cost instances (#6895)
- refactor(spanner): Use background threads for admin LROs (#6853, #6835)
- feature(spanner): add optimizer_statistics_package to QueryOptions (#6727)
- fix(spanner): pick up tracing-option defaults in SetBasicDefaults() (#6691)
- feat(common): support LROs (long-running operations) use background threads (#6855, #6831, #6824, #6823, #6822, #6820, #6816, #6804)
- fix(common): remove blocking call in MinimalIamCredentials (#6813)
- feat(bigtable): Add asynchronous method for sampling row keys (#6561). Users
that extend
bigtable::DataClient
and wish to use the new method will need to overridePrepareAsyncSampleRowKeys()
. - fix(bigtable):
bigtable::Table::AsyncBulkApply()
now respects the Retry and Backoff policies (#6510)
NOTE This release includes an experimental IAM client library. This library is NOT GA and is likely to have breaking changes in the coming months. Feel free to take a look, file issues, ask questions, and even experiment with it, but do not ship production code using it yet.
- feature(iam): generate iam admin code (#6430)
- fix(pubsub): save refresh timer for cancellation (#6662)
- feat(pubsub): add ability to set the ack deadline extension (#6620)
- feat(spanner): use multiple channels instead of multiple client for the multiple rows cpu benchmark (#6659)
- fix(spanner): do not warn about SessionPoolClockOption (#6619)
- feat(storage): recommend
g::c::Options
(#6640) - feat(storage): support multiple channels in GCS+gRPC (#6593)
- feat(storage): round-robin stub for GCS+gRPC (#6584)
- fix(storage): compile GCS+gRPC with Windows+x86 (#6556)
- feat(storage): install rules for GCS+gRPC plugin (#6527)
- fix(storage): compile with GCC 11 in C++17 mode (#6501)
- feat: Support unified credentials (
google::cloud::Credentials
) to initialize both the REST and gRPC plugins with the same classes. (#6518)(#6531)(#6617)(#6488)(#6441)
- feat: Add support for "unified" credentials, which allow applications to
Configure the REST and gRPC-based libraries using the same credential classes
Support complex credential types, such as service account impersonation
With this release, only the
storage
library supports unified credentials. (#6617)(#6614)(#6531)(#6518) - feat: an example using identity tokens with gRPC (#6583)
- feat: example using identity tokens (#6569)
- fix(storage): missing implementation for constructor (#6439)
- feat(storage): minimal stub for IAM credentials service (#6425)
- feat: support errors in DynamicAccessTokenCredentials (#6325)
- feat(storage): use the unified authentication client (#6323)
- feat(storage): map unified to REST credentials (#6301)
- refactor(storage): use g::c::Options in RawClients (#6282)
- refactor(storage): common code for client unit tests (#6256)
- doc(storage): wrong arguments for quickstart program (#6249)
- fix(storage): deflake IAM integration test (#6234)
- fix(storage): disable self-signed JWT authentication (#6230)
- refactor(storage): use g::c::Options for GrpcClient (#6209)
- refactor(storage): use g::c::Options in CurlClient (#6203)
- refactor(storage): compute default options in a single function (#6200)
- refactor(storage): use g::c::Options in ClientOptions (#6183)
- fix(spanner): propagate request_options in ReadPartition serialization (#6319)
- feat(common): credentials for service account impersonation (#6429)
- feat(common): gRPC support for service account impersonation (#6401)
- feat(common): support asynchronous RPCs in GrpcAuthenticationStrategy (#6391)
- feat: a cache for access tokens retrieved using gRPC (#6381)
- feat: minimal stub for service account impersonation (#6348)
- feat: support errors in DynamicAccessTokenCredentials (#6325)
- feat(common): support unified credentials in gRPC (#6304)
- feat(common): bootstrap Unified Authentication Client (#6299)
- refactor!: remove gcpcxx.pb suffix from generated files (#6286)
- feat(iam): an example for GenerateAccessToken (#6188)
BREAKING CHANGES:
- In #6243 we stopped compiling the code in
generator/
by default in CMake builds. In most cases this should just be a performance win as this code is not used by client libraries. However, if anyone was relying on thegenerator/
being compiled, it can be re-enabled with-DGOOGLE_CLOUD_CPP_ENABLE_GENERATOR=ON
- In #6286, we removed the .gcpcxx.pb suffix from filenames emitted from the C++ microgenerator. Any usages of the bigquery, iamcredentials, or logging experimental libraries will require updating of include paths in user code.
- fix(storage): disable self-signed JWT authentication (#6238)
NOTE This release includes an experimental BigQuery Storage Read client library. This library is NOT GA and is likely to have breaking changes in the coming months. Feel free to take a look, file issues, ask questions, and even experiment with it, but do not ship production code using it yet.
- feature(bigquery): add quickstart (#6116)
- feature(bigquery): add success case integration tests (#6102)
- feature(bigquery): storage library generation (#5989)
BREAKING CHANGES:
bigtable::AdminClient
,bigtable::DataClient
, andbigtable::InstanceAdminClient
each gained a new, pure virtualBackgroundThreadsFactory()
member function, requiring anyone who derives from those classes to implement that function. This would typically only affect users who create mock clients for testing purposes.
OTHER CHANGES:
- feat(common): experimental logging configuration (#6049)
- feat(bigtable): Bind CompletionQueue with Table (#6012)
- feat: bind
CompletionQueue
withTableAdmin
(#6004) - feat: bind
CompletionQueue
withInstanceAdmin
(#5967) - feat(bigtable): enable keepalive pings by default (#5969)
- feat(pubsub): schemas are no longer experimental (#6115)
- fix(pubsub): deadlocks for cancel during session startup (#6055)
- feat(common): experimental logging configuration (#6049)
- doc(pubsub): fix region tags for two examples (#5944)
- doc(storage): always use signing account in examples (#6149)
- feat(storage): self-signed JWTs for service accounts (#6096)
- doc(storage): better description for ObjectWriteStream (#6075)
- cleanup: deprecate some IAM types (#6069)
- fix(storage): move disabling consts (#6064)
- fix(storage): use after move problems (#6066)
- feat(common): experimental logging configuration (#6049)
- doc(storage): describe how to use optional parameters (#5983)
- fix(storage): correctly set customTime on inserts (#5980)
- fix(storage): do not update upload session ids (#5979)
- feat(storage): implement storage::GrpcClient::TestBucketIamPermissions (#5957)
- feat(storage): implement storage::GrpcClient::DeleteResumableUpload (#5941)
- feature(spanner): request priority (#6103)
- feature(spanner): update CMEK samples (#6120)
- feature(spanner): customer-managed encryption (#6087)
- feat(common): experimental logging configuration (#6049)
- feat(spanner): connection factories now prefer
Options
(#6046) - feat(common): make Options public (#6042)
- doc(spanner): fix expected option lists (#6029)
- feat(common): experimental logging configuration (#6049)
- feat(common): log the last N entries (#6048)
- feat(common): make
google::cloud::Options
public (#6042)
-
We have marked the asynchronous versions of the administrative functions as deprecated. These functions were experimental and we do not think they add value to our customers. Removing them would simplify the code and free development time for further features and cleanups. More information in #5923.
-
The legacy IAM functions were marked as deprecated via doxygen comments. Now they should generate warnings at the call site, depending on your compiler settings. See #5929 for more information.
-
feat(bigtable): add CMEK attributes to admin APIs (#5921)
-
feat(bigtable): limit default connection pool size (#5881)
-
doc: workarounds for Bazel and path length problems (#5869)
-
doc(bigtable): add configure_connection_pool sample (#5839)
- Implemented support for "schemas". This feature allows you to define the
schema of the messages accepted by a
Topic
. The schemas can be defined using AVRO or Protocol Buffers. This is a public preview feature of Cloud Pub/Sub, the APIs are found in the::google::cloud::pubsub_experimental
namespace.
- feat(spanner): Point-In-Time Recovery (PITR) (#5906) This is a major new feature in Spanner, supporting backups and restores at a given timestamp.
- refactor(spanner): spanner::Timestamp/protobuf::Timestamp conversions… (#5876)
- feat(spanner): statistics returned for a committed transaction (#5809)
-
The legacy IAM functions were marked as deprecated via doxygen comments. Now they should generate warnings at the call site, depending on your compiler settings. See #5929 for more information.
-
doc(storage): Update UBLA documentation to reflect its current status (#5870) It has been GA for a long time, but was still described as not in our comments.
-
fix(storage): remove unneeded dependency (#5798) The backwards compatibility target and package (
storage_client
) required the googleapis protos.
NOTE: We are clarifying our approach to backwards compatibility beyond the C++ API. See the README.md on GitHub for details
- Starting with this release the legacy targets, such as
//google/cloud/pubsub:pubsub_client
are deprecated and generate warnings recommending a replacement (such as//:pubsub
). Note that you may have to prefix the target with the external package name you gave this library, e.g.,@github_com_google_cloud_cpp//:pubsub
. (#5746)
- feat(bigtable): restore from backups in other instance (#5754)
- feat(bigtable): better control over channel refresh (#5753)
No user-facing changes.
BREAKING CHANGES:
- UniformBucketLevelAccess was known as BucketPolicyOnly during the beta. For compatibility the C++ Cloud Storage library supported both, however BucketPolicyOnly is now completely removed. (#5720)
Other Changes:
- feat(storage): Support includeTrailingDelimiter in Client::ListObjects (#5713)
BREAKING CHANGES:
- refactor!: removed old bigquery code (#5722)
- fix: crashes during client shutdown (#5701)
- Removed OpenCensus example. OpenCensus has merged
with OpenTracing into OpenTelemetry. The C++
development seems to have stalled, and we not longer believe it will ever
be mature enough to recommend for the
google-cloud-cpp
libraries.
- feat(bigtable): enforce id limits in admin emulator (#5679)
- feat(bigtable): create logging layer for Cloud Bigtable DataClient (#5654)
- feat(bigtable): create logging layer for Cloud Bigtable InstanceAdminClient (#5653)
- feat(bigtable): create logging layer for Cloud Bigtable (#5556)
- feat: implement Bigtable connection refresh (#5550)
- feat: Implement backup level IAM policy (#5585)
- feat(pubsub): add equality to Publisher (#5608)
- fix(storage): incorrect CURL handle manipulation (#5651)
- feat(storage): propagate custom header with resumable upload PUT requests (#5632)
- fix: only build gRPC testing utilities if needed (#5594)
- cleanup: rename spanner::internal to spanner_internal (#5620)
- fix: get the code to compile with MSVC 2017 (#5574)
- fix: only build gRPC testing utilities if needed (#5594)
- feat: Implement backup level IAM policy (#5585)
- fix: get the code to compile with MSVC 2017 (#5574)
- cleanup: remove custom C++ version variable (#5674)
BREAKING CHANGES:
- Some "Range" types used in the Storage, Pub/Sub and Spanner APIs lost a
constructor that was never intended to be part of their public APIs. Users
who were not directly constructing these ranges will not be affected. Also
some performance improvements were made to their iterator implementations
that could break callers who were relying on unspecified behavior that is not
required by the input
range concept.
The affected types are:
google/cloud/storage/list_buckets_reader.h
using ListBucketsReader = google::cloud::internal::PaginationRange
google/cloud/storage/list_hmac_keys_reader.h
using ListHmacKeysReader = google::cloud::internal::PaginationRange
google/cloud/storage/list_objects_and_prefixes_reader.h
using ListObjectsAndPrefixesReader = google::cloud::internal::PaginationRange
google/cloud/storage/list_objects_reader.h
using ListObjectsReader = google::cloud::internal::PaginationRange
google/cloud/pubsub/subscription_admin_connection.h
using ListSubscriptionsRange = google::cloud::internal::PaginationRange
using ListSnapshotsRange = google::cloud::internal::PaginationRange
google/cloud/pubsub/topic_admin_connection.h
using ListTopicsRange = google::cloud::internal::PaginationRange
using ListTopicSubscriptionsRange = google::cloud::internal::PaginationRange
using ListTopicSnapshotsRange = google::cloud::internal::PaginationRange
google/cloud/spanner/database_admin_connection.h
using ListDatabaseRange = google::cloud::internal::PaginationRange
using ListBackupOperationsRange = google::cloud::internal::PaginationRange
using ListDatabaseOperationsRange = google::cloud::internal::PaginationRange
using ListBackupsRange = google::cloud::internal::PaginationRange
google/cloud/spanner/instance_admin_connection.h
using ListInstancesRange = google::cloud::internal::PaginationRange
using ListInstanceConfigsRange = google::cloud::internal::PaginationRange
- fix(bigtable): missing functions to change policies (#5565)
- feat(bigtable): create logging layer for Cloud Bigtable (#5515)
- docs: document Bigtable thread safety (#5394)
- feat(pubsub): by default Subscriber::Subscribe retries forever (#5552)
- fix(pubsub): deadlock during streaming pull shutdown (#5547)
- fix(pubsub): deadlock during fire & forget shutdown (#5541)
- refactor!: PaginationRange is now an alias to StreamRange (#5538)
- doc(pubsub): declare the library GA (#5390)
- doc(pubsub): how to run throughput benchmark (#5500)
- feat(pubsub): separate subscribers in benchmark (#5499)
- feat(pubsub): separate publishers in benchmark (#5496)
- feat(pubsub): minor optimization in publisher (#5495)
- fix(pubsub): reduce data copying in publish (#5484)
- feat(pubsub): more efficient callback dispatch (#5458)
- feat(pubsub): batch acks and nacks in streams (#5464)
- feat(pubsub): increase default buffer sizes (#5449)
- feat(pubsub): pace publisher in throughput benchmark (#5447)
- feat(pubsub): improve lease management performance (#5454)
- feat(pubsub): more details in throughput benchmark (#5451)
- feat(pubsub): import throughput benchmark reports (#5450)
- feat(pubsub): show ack throughput in benchmark (#5439)
- feat(pubsub): handle AsyncPull responses in batches (#5441)
- feat(pubsub): round robin subscriber channels (#5423)
- feat(pubsub): more throughput benchmark options (#5419)
- fix(pubsub): keep corked after ResumePublish (#5415)
- fix(pubsub): sometimes published oversized batches (#5409)
- feat(pubsub): round robin publisher connections (#5401)
- feat(pubsub): reduce default channel count (#5402)
- feat(spanner): Point-In-Time Recovery (lite) throttled DB update (#5562)
- refactor!: PaginationRange is now an alias to StreamRange (#5538)
- refactor!: change gcs to use common PaginationRange (#5545)
- fix(storage): use channel options for credentials (#5524)
- fix: validate service account credentials contain a usable key (#5404)
- feat: add value_type to StatusOr (#5535)
- feat: introduce a generic StreamRange (#5532)
- refactor(common): move CompletionQueue mock (#5463)
- feat: a faster CompletionQueue::RunAsync (#5406)
No user-facing changes.
BREAKING CHANGES:
This is the first GA release of the Pub/Sub library. While breaking changes before GA should be expected, we think highlighting them here is important.
-
Simplify the concurrency control configuration in
pubsub::SubscriberOptions
. Applications only need to set the maximum number of messages that will be scheduled in parallel. -
Remove
pubsub::AckHandler::ack_id()
accessor. We believe application developers should have no need for this field. -
Rename
pubsub::SubscriptionOptions
topubsub::SubscriberOptions
as these are bound to a specific subscriber object. -
Change the
pubsub::Subscriber
API. ASubscriber
is now bound to a specific Cloud Pub/Sub subscription, with a fixed set ofSuscriptionOptions
, just like apubsub::Publisher
is bound to a specific topic and a set ofPublisherOptions
. In addition to making publishers and subscribers more symmetrical, this makes the library more consistent with the Cloud Pub/Sub library for other languages. Finally, note that we are planning to renameSubscriptionOptions
toSubscriberOptions
in a future PR too. -
Remove option to disable retries in
Publisher::Publish
. This is redundant as the application can set a "no retries" retry policy. This is more consistent with other Cloud Pub/Sub libraries. We include an example showing how to configure a "no retries" retry policy. -
Fix inconsistent naming for
PublisherOptions
attributes controlling the maximum number of messages per batch and the maximum number of bytes per batch. -
Rename the
{Topic,Snapshot,Subscription}MutationBuilder
classes, removingMutation
from their names. This makes the C++ library more familiar for Cloud Pub/Sub developers coming from other languages. -
Simplify the message flow control configuration. Now that the library uses streaming pulls, the low water marks are not used. The application developer simply sets limits for the number of messages (and/or bytes) outstanding. These limits are propagated to the service, and the service will stop streaming if too many messages (or bytes) are outstanding.
No user-facing changes.
BREAKING CHANGES:
- Our public headers no longer include
nlohmann/json.hpp
. Please update your code to directly include this header if you need it. We believe it is not a good practice to depend on indirectly included headers, but do feel we should warn our customers of this change.
OTHER CHANGES:
- Unexpected curl errors will now be retried (#5312)
- docs: add error handling example from
client->ReadObject()
(#5274) - feat(storage): Create an example for
Client::DeleteResumableUpload()
- doc: prefer UBLA references over bucket-policy-only
- Fixed occasional crash on background thread shutdown (#5324)
GCP_LOG
now serializes its output tostd::clog
(#5179)
-
fix(storage): consistent computation of XML vs. JSON (#5095) The interaction of
ClientOptions::set_endpoint()
and theCLOUD_STORAGE_TESTBENCH_ENDPOINT
environment variable was inconsistent across endpoints. For JSON endpointsset_endpoint()
overrode theCLOUD_STORAGE_TESTBENCH_ENDPOINT
value, while for XML endpoints it was the opposite.In other libraries the environment variable always wins, so we are changing the behavior here. This behavior was never documented, and it was buggy, therefore it is not a breaking change. Nonetheless, we think the bug (and the fix) is surprising enough to highlight in the CHANGELOG.
-
fix: enable
codecvt
(UTF-8 support for signed URLs) in MSVC (#5126) -
fix(storage): avoid stalls with small reads (#5104)
-
feat(storage): disable XML via environment variable (#5100)
-
fix(storage): use correct host header (#5085)
- fix: retry gRPC operations if the connection is unexpectedly terminated (#5087)
- doc(spanner): use custom retry example in the Doxygen docs (#5164)
⚠️ This library is under development and subject to breaking changes without notice.
- feat(pubsub): wait for callback return and handler (#5161)
- In addition, @remyabel contributed a number of examples.
- fix: add missing object ACLs in gRPC client (#5029)
- fix: work with unknown SSL version in curl (#5037)
- This release includes support for the
NUMERIC
data type in Cloud Spanner. - doc: adapt to new specification for NUMERIC samples (#5049)
- doc: add
spanner_query_with_*_parameter
samples (#5016) - feat: start using NUMERIC types in database schema (#5025)
- The current release is a preview of the upcoming GA release. While we think the APIs are unlikely to change before GA, we reserve the right to change these APIs for now. This release may need optimization before it is ready for production workloads.
- feat: create promises without shared state (#5046)
- feat: make CompletionQueueImpl mockable [1] (#5036) (#5039) (#5043)
- feat: support cancels for asynchronous unary RPCs (#5047)
- fix: correct C++ version under MSVC (#5038)
- fix: CompletionQueue shutdown disables RunAsync (#5008)
- fix: remove 'Bigtable' from generic error message (#5034)
- fix: remove unneeded dep on absl::variant (#5054)
- doc: update quickstart README files (#4980)
BREAKING CHANGES
- fix(storage)!: use nlohmann_json library as any other dependency (#4747)
- After this change applications using CMake must install the
nlohmann_json library. Automatically downloading
the library (a) creates problems for package maintainers, (b) requires
brittle code to keep the symbols from leaking, and (c) creates problems
for users that need newer versions of this library, for example, because
they are using a compiler that was not supported by the version we pick.
- Applications using Bazel or CMake super builds should not be impacted.
- We have updated our instructions to install this library from source on multiple Linux distributions.
- Applications using a package manager will need to update their build scripts to add this dependency.
- In addition, this removes a number of symbols in the
google_cloud_cpp_internal_nlohmman_json_3_4_0::
namespace. Obviously we never intended these symbols for public use, but we should have been clearer about it.
- After this change applications using CMake must install the
nlohmann_json library. Automatically downloading
the library (a) creates problems for package maintainers, (b) requires
brittle code to keep the symbols from leaking, and (c) creates problems
for users that need newer versions of this library, for example, because
they are using a compiler that was not supported by the version we pick.
Other Changes
- doc: update quickstart README files (#4980)
- feat(storage): custom_time in ObjectMetadata (#4901)
- feat(storage): noncurrent and custom time OLM (#4871)
- fix: cmake configs missing find_dependency(abseil) (#4919)
- doc(spanner): add samples for "datatypes" region tags (#4999)
- doc: update quickstart README files (#4855) (#4980)
- fix(spanner): correct variable used to build instance config (#4791)
- feat: add a
KmsKeyName
class (#4891) - feat: automatically create background thread pools (#4936)
- fix: clang-tidy works on all headers (#4844)
- fix: cmake configs missing find_dependency(abseil) (#4919)
- doc: remove not GA warning from bigtable backup methods (#4601)
- doc: restore quickstart's region tags (#4525)
- fix: builds on 64-bit Windows (#4523)
- fix: warnings under Windows+MSVC+x86 (#4515)
- feat:
CompletionQueue::RunAsync
with no arguments (#4450)
BREAKING CHANGES
- fix!: incorrect type in OLM condition (#4597)
changed thecreated_before
field inLifecycleRuleCondition
from a time point to a date
Other Changes
- fix: GCE credentials response handling (#4739)
- feat: add a function to delete resumable upload in client (#4696)
- doc: include guidelines for bucket names (#4688)
- feat: add a function
DeleteResumableUpload
toRawClient
(#4678) - fix: missing
CreateDefaultClientOptions
overload (#4677) - feat: a request type to delete pending resumable uploads (#4617)
- feat: disable MD5Hash by default (#4591)
- feat: Add startOffset and endOffset (#4518)
- fix: warnings under Windows+MSVC+x86 (#4515)
- fix: avoid chunked transfer encoding (#4506)
- fix: avoid unnecessary chunk to finalize uploads (#4504)
- feat: Add
Client::ListObjectsAndPrefixes
(#4494) - fix: multiple problems under Windows+MSVC+x86 (#4502)
- feat: reduce data copies in uploads (#4496)
- fix: workaround min/max macros on Windows (#4490)
- feat: reduce copies during uploads (#4489)
- feat: Add
UploadFromOffset
andUploadLimit
toUploadFile
(#4473) - feat: HTTP requests with many buffers (#4480)
- feat: Add
value_or()
to options params and headers (#4408)
BREAKING CHANGES
- refactor!:
spanner::Timestamp
implementing usingabsl::Time
(#4625)
spanner::Timestamp no longer allows construction from or conversion to a chrono time point with picosecond precision - refactor!: use
absl::CivilDay
for "date" type (#4600)
absl::CivilDay's
constructors are explicit (by design), where as the oldspanner::Date
3-arg constructor was not explicit.
Fix issue #4516: atomicity is violated if the first operation in a RW
Transaction fails.
If this occurs, the library now explicitly begins a new transaction and
retries the failed operation. This ensures subsequent operations using the
same Transaction
object are in fact executed in the same Spanner
transaction.
- fix: begin a
has_begin
transaction in Rollback() (#4731) - fix: handle
ExecuteBatchDml
returning OK with no results (#4724) - fix: use the updated transaction id in
ReadImpl
(#4722) - fix: explicitly begin failed implicit begin transactions (#4706)
- feat: handle invalid transactions in
ConnectionImpl
methods - feat: store a Status when invalidating Transactions (#4670)
- feat: support moving a
Transaction
into an error state (#4545)
Other Changes
- doc: note that NUMERIC columns are not yet available (#4738)
- feat: add
google-cloud-resource-prefix
to non-admin operations (#4703) - fix: date formatting with negative years (#4614)
- feat: add
google::cloud::spanner::Numeric
(#4418) - fix: warnings under Windows+MSVC+x86 (#4515)
- feat: log the result for
future<StatusOr<T>>
(#4746)
BREAKING CHANGES
- fix!: incorrect type in OLM condition (#4597)
changed thecreated_before
field inLifecycleRuleCondition
from a time point to a date
Other Changes
- fix: timestamp proto encoding works before the epoch and with extreme values (#4611)
- feat:
CompletionQueue::RunAsync
with no arguments (#4450) - feat: log exceptions in example driver (#4453)
- feature: add bigtable backup API support (#4407)
- fix: deadlock in MutationBatcher (#4327)
- fix: support ObjectReadStream::tellg() (#4402)
- fix(storage): treat 408 errors as retryable (#4397)
- fix(GCS+gRPC): simplify DirectPath configuration (#4388)
- feat(GCS+gRPC): DirectPath can be manually configured (#4379)
- fix: warnings with MSVC 2019 16.6 (aka 19.26 akak 14.26) (#4365)
- feat(storage/benchmarks): compare to raw downloads (#4362)
- feat(storage/benchmark): experiment integration test (#4360)
- feat(storage/benchmarks): control CRC32C/MD5 options (#4326)
- fix: incorrect metadata key string (#4431)
- doc(spanner): add CreateInstance() example (#4405)
- fix(spanner): examples on how to delete data (#4401)
- feat: use
SELECT 1
to refresh sessions (#4377) - fix(spanner): use correct name for test (#4373)
- fix: CompletionQueue::RunAsync is always async (#4448)
- fix: broken builds on Windows+CMake+Release (#4442)
- fix: test with correct MockCompletionQueue (#4427)
- fix: make potential narrowing cast of nanoseconds explicit (#4391)
- fix: memory stomping in CompletionQueue::RunAsync (#4330)
- This is the first release that includes the Spanner library, which previously lived at github.com/googleapis/google-cloud-cpp-spanner. All future releases of the Spanner library will be from this repo, and the other repo will be archived.
- In this release we take a dependency on the [Abseil] (https://github.com/abseil/abseil-cpp) C++ library.
- In this release we dropped our dependency on
https://github.com/googleapis/cpp-cmakefiles. We moved the CMake rules to
compile and install the googleapis protos into this repo in the
external/googleapis/
directory.
- feat: more bigtable data filter samples (#4315)
- feat: add rvalue reference overloads to
Row
(#4239) - feat: implemented an efficient
SetCell(Cell)
overload to copy an existing cell to a mutation - feat: remove dep on cpp-cmakefiles, integrating the CMake rules into this repo (#4245)
- feat: add absl crash handler support for bigtable examples (#4150)
- feat: more bigtable data filter samples (#4141)
- fix: warning options exported in library interface (#4134)
- fix: proper routing headers for longrunning ops (#4099)
- feat: add bigtable data filter samples (#4069)
- fix: bigtable's random_mutation_test missing from build (#4058)
- chore: bigtable, storage quickstarts use top-level build targets (#4050)
- feat: support X-Upload-Content-Length header (#4284)
- feat(storage/benchmark): cleanup storage benchmarks
- feat(storage/benchmark): support GCS+gRPC plugin in storage benchmarks
- feat: EXPERIMENTAL introduced an optional gRPC plugin to the GCS client library.
- feat: support XML vs. JSON in throughput_vs_cpu_benchmark (#4277)
- fix: fix off-by-one in uploading streams to GCS (#4250)
- feat: proto conversions for BucketAccessControl (#4247)
- feat: remove dep on cpp-cmakefiles, integrating the CMake rules into this repo (#4245)
- feat: implement To/FromProto for CustomerEncryption (#4242)
- fix: warning options exported in library interface (#4134)
- fix: C2593 'operator =' is ambiguous (#4059)
- chore: bigtable, storage quickstarts use top-level build targets (#4050)
- This is the first release of this repo that contains the Cloud Spanner C++ Client Library. Previously, this library lived in a separate repo (https://github.com/googleapis/google-cloud-cpp-spanner). That old repo will be archived, and all future Cloud Spanner C++ Client Library releases will come from this repo.
- feat: remove dep on cpp-cmakefiles, integrating the CMake rules into this repo (#4245)
- fix: warning options exported in library interface (#4134)
- fix: use correct variable for SOVERSION (#4131)
NOTICE: This release aligns all the version numbers for Bigtable, Storage, the common libraries, and the repository itself. From this point on all releases will include a single version number. Note that there is a gap in the version numbers for Bigtable and the repository changes from v0.21.0 to v1.13.0
BREAKING CHANGES
- The common library inlined namespace changed to
v0
tov1
, moving all the symbols fromgoogle::cloud::v0
togoogle::cloud::v1
. Applications that explicitly referred to the inlined namespace would be affected by this change. That is, code that usesgoogle::cloud::v0::Foo
instead ofgoogle::cloud::Foo
would need to be modified. We apologize if this has impacted you, and recommend that applications do not refer to the inlined namespace in the future.
BREAKING CHANGES
See above regarding the common library inlined namespace.
OTHER CHANGES
- cleanup: the library now links against the common libraries included in this repository, applications developers should not install the standalone common libraries in the (now archived) google-cloud-cpp-common repository.
- feat: compile bigtable benchmarks with Bazel (#3884)
- feat: implement table level IAM policy for bigtable(async) (#3829)
- feat: implement table level IAM policy for bigtable (#3751)
- refactor: synchronize version numbers for all libraries (#3710)
- feat: change READMEs and quickstart programs (#3690)
The
google/cloud/bigable/quickstart/
directory contains a sample project for CMake and Bazel that uses the Cloud Bigtable C++ client library as we expect application developers would.
BREAKING CHANGES
See above regarding the common library inlined namespace.
- fix!: use correct type for generation numbers (#3870) This changes the type of
two fields from
google::cloud::optional<long>
togoogle::cloud::optional<std::int64_t>
. With MSVC this is not a backwards compatible change (storing the result of.value()
into along
now loses precision). However, on that platform the fields were not usable, they could not store the values that are typically generated by the production environment. We apologize to any customers affected by this change, but we think it is unlikely that anybody used the field on that platform.
OTHER CHANGES
- cleanup: the library now links against the common libraries included in this repository, applications developers should not install the standalone common libraries in the (now archived) google-cloud-cpp-common repository.
- feat: implement POST policy signatures. Applications can use the Google Cloud Storage C++ client library to create POST objects, which allow uploading using HTML forms.
- feat: change READMEs and quickstart programs (#3690)
The
google/cloud/bigable/quickstart/
directory contains a sample project for CMake and Bazel that uses the Cloud Bigtable C++ client library as we expect application developers would. - fix: use network to check if running inside Google (#3959) With this change applications running on Google App Engine Flex (GAEF), Google Kubernetes Engine (GKE), or Cloud Run can use the Google Default Credentials.
- fix: build problems on MSVC x86 (#3916)
- fix: do not use CURL_SHARE features (#3860)
- chore: upgrade libcurl to v7.69.1 (#3851)
BREAKING CHANGES
See above regarding the common library inlined namespace.
OTHER CHANGES
No other interesting changes in the common libraries with this release.
NOTICE: This repo will soon contain the code for all the other related
google-cloud-cpp-*
repos. As a new monorepo (#3612), the versioning of this repo will be changing to have a single per-repo version. The per-library version numbers will be removed in favor of the repo version. See googleapis#3615 for more info.
BREAKING CHANGES
- fix!: moved IAM-related symbols to the correct inlined namespace (#3453)
Most users should not notice any difference, but those that explicitly referenced
symbols through the
google::cloud::bigtable::v0
namespace may need to switch togoogle::cloud::bigtable
(the recommended approach) orgoogle::cloud::bigtable::v1
. We apologize if this causes you inconvenience.
BREAKING CHANGES
- fix!: moved IAM-related symbols to the correct inlined namespace (#3453)
Most users should not notice any difference, but those that explicitly referenced
symbols through the
google::cloud::storage::v0
namespace may need to switch togoogle::cloud::storage
(the recommended approach) orgoogle::cloud::storage::v1
. We apologize if this causes you inconvenience.
Other Changes:
- feat: add support for iam conditions (#3497)
- bug: express libcurl version in hex (#3487)
- bug: check curl connection before unpausing (#3485)
- feat: allow domain named buckets in signed URLs v4 (#3463)
- feat: implement virtual hostname V4 signatures
- feat: add configuration options to set the SSL root of trust (#3455)
- doc: add doxygen comments for ParallelUploadFile (#3448)
- feat: support x-goog-content-sha256 for V4 signed URLs (#3435)
Other Changes
- None
- No changes to the Bigtable client in this release.
- feat: implement resumable parallel file uploads (#3389) - allow applications to use multiple threads to upload large files, achieving throughput in excess of 1GiB/s. With this change applications can restart such uploads even if the application restarts.
- chore: upgrade testbench to Python 3 (#3402) - you will need to have Python 3 installed to run the integration tests.
- fix: correct environment handling in client_options_test (#3374)
- chore: update g-c-cpp-common to v0.19.0 (#3384)
- chore: upgrade to cpp-cmakefiles v0.4.1 (#3372)
- chore: update g-c-cpp-common to v0.19.0 (#3384)
- feat: implement ParallelUploadPersistentState (#3382)
- refactor: create ParallelUploadStateImpl (#3379)
- refactor: ScopedDeleter doesn't require metadata (#3380)
- docs: add examples of different credential classes for bigtable
- feat: use Bigtable direct path if configured (#3338)
BREAKING CHANGE
- fix!: insert logging layer only if requested (#3349)
Other Changes:
- fix: handle completed uploads in UploadChunk (#3348)
- fix: use ::testing::TempDir for test files (#3345)
- fix: remove debug log from benchmark output (#3341)
- test: allow specifying dir in parallel upload BM (#3339)
- feat: generate plots for parallel upload benchmark (#3336)
- doc: some fixes for storage client docs (#3332)
- feat: improve storage_throughput_benchmark (#3330)
- cleanup: remove tmpnam (#3325)
- test: don't build benchmarks without tests (#3322)
- feat: implement Delimiter option for ListObjects (#3320)
- docs: document parallel uploads design (#3321)
- test: implement a benchmark for parallel uploads (#3302)
- fix: handle CURLE_GOT_NOTHING as retryable (#3316)
- feat: benchmark reading many small chunks (#3313)
- feat: new functions to create
Chain
andInterleave
filters from ranges ofFilter
objects
BREAKING CHANGE
- feat: move creating prefix marker to ComposeMany (#3306)
Other Changes:
- feat: implement parallel uploads. For large files this can improve the upload bandwidth by a factor of 20. Note that in this release such uploads cannot be resumed after a program restart. (#3279)
- feat: support optionsRequestedPolicyVersion query parameter in
- fix: setting options in requests accepts crefs (#3287)
- feat: implement Bigtable sync vs. async benchmark (#3276)
- fix: detect duplicate cluster ids in
bigtable::InstanceConfig
(#3262) - bug: use
CalculateDefaultConnectionPoolSize
inset_connection_pool_size
(#3261)
- fix: add logic to ObjectWriteStreambuf for handling jumps in upload ranges to fix #3280 (#3283)
- bug: fix error messages in resumable sessions (#3263)
BREAKING CHANGE:
- The common libraries have been moved to the google-cloud-cpp-common repository. While this may not be a technically breaking change (the API and ABI remain unchanged, the include paths are the same), it will require application developers to change their build scripts.
- Submodule builds no longer supported.
- Upgraded cmake-format to 0.6.0. #3211
- Upgraded gRPC to 1.24.3 #3217
- Upgraded googletest to 1.10.0 #3201
- Pass along error message in
Table::Apply
retry loop #3208
- Implement
ComposeMany
to efficiently compose more than 32 GCS objects #3016 - Implement a function to delete all the objects that match a given prefix #3016
- Support uniform bucket level access #3186
- Use separate policy instances for each UploadChunk request #3213
- bug: fix runtime install directory (#3063)
- bug: fix runtime install directory (#3063)
- feat: treat
CURLE_SSL_CONNECT_ERROR as retryable
(#3077) - feat: Change JSON endpoint for
google/cloud/storage
. (#3076) - bug: restart downloads with retryable HTTP errors. (#3072)
- bug: calls to
resumable_session_id()
result in segfaults (#3062) - feat: added
ReadLast
option for reading object from end (#3058) - bug: handle
CURLE_PARTIAL_FILE
as recoverable (#3061) - bug: fix runtime install directory (#3063)
- bug: verify checksums and hashes on
xgetsn()
(#3057) - bug: return all bytes when stream is closed (#3054)
- feat: reset retry policy for each retry loop (#3050)
- feat: Configure C++17 build. (#2961)
- fix: use MetadataUpdatePolicy::FromClusterId. (#2968)
- fix: correct invalid routing headers. (#2988)
- feat: Random CRC and MD5 in storage throughput benchmark (#2943)
- feat: Make GCS throughput benchmark record progress. (#2944)
- feat: Increase download and upload buffers. (#2945)
- feat: Increase the threshold for using resumable uploads (#2946)
- cleanup: Don't include nljson.h from public oauth2 headers. (#2954)
- bug: Handle CURLE_{RECV,SEND}_ERROR as StatusCode::kUnavailable. (#2965)
- cleanup: Use ObjectMetadata in ResumableUploadResponse. (#2969)
- bug: do not disable hashes when Disable{MD5,Crc32c} are set to false (#2979)
- feat: Improve ObjectWriteStreambuf by replacing O(n^2) code. (#2989)
- cleanup: use existing function to generate data. (#2992)
- feat: allow applications to timeout stalled downloads. (#2993)
- fix: Actually enable the error injection test. (#2995)
- cleanup: Factor out payload creation from ServiceAccountCredentials:: (#2997)
- cleanup: Add additional testing for credential helpers. (#3004)
- fix: return proper error code from upload metadata (#3005)
- bug: Fix the initial backoff interval. (#3007)
- fix: eliminate a race condition from retry loop (#3013)
- bug: Unit tests are too slow. (#3021)
- fix: don't throw on expired retry policies (#3023)
- bug: ReadObject() retries only once (#3028)
- bug: CurlRequestBuilder not initializing all members. (#3035)
- fix: use next_expected_byte() in retried uploads (#3037)
- feat: Use macros for compiler id and version (#2937)
- fix: Fix bazel build on windows. (#2940)
- chore: Keep release tags in master branch. (#2963)
- cleanup: Use only find_package to find dependencies. (#2967)
- feat: Add ability to disable building libraries (#3025)
- bug: fix builds with CMake 3.15 (#3033)
- feat: Document behavior of passing empty string to SetEnv on Windows (#3030)
- feat: Minimize contention in Bigtable Client initialization. (#2923)
- feat: Support setting 64-bit integers mutations. (#2866)
- feat: Implement support for IAM conditions. (#2854)
- BREAKING CHANGE: use cmake files from github.com/googleapis/cpp-cmakefiles for googleapis protos (#2888)
- feat: Control TCP memory usage in GCS library. (#2902)
- feat: Make partial errors/last_status available to
ObjectWriteStream
(#2919) - feat: Change storage/benchmarks to compile with exceptions disabled. (#2916)
- feat: Implement native IAM operations for GCS. (#2900)
- feat: Helpers for PredefinedDefaultObjectAcl. (#2885)
- bug: Fix ReadObject() when reading the last chunk. (#2864)
- bug: Use correct field name for MD5 hash. (#2876)
- feat: add
conjunction
metafunction (#2892) - bug: Fix typo in testing_util/config.cmake.in (#2851)
- bug: Include 'IncludeGMock.cmake' in testing_util/config.cmake.in (#2848)
- bug: the library will return an error instead of simply discarding unknown IAM fields.
- feature: update googleapis protos to a more recent version.
- cleanup: marked rarely used CMake options as advanced. They will no longer show up by default in your CMake UI.
- Several internal cleanups, such as removing unused code in
google::cloud::bigtable::internal
, fixing constant names to follow the Google Style Guide, simplify the generation of version metadata, make it easier to import the code into Google, turned on-Wextra
for our builds, moved the sanitizer builds to Bazel, and refactoring generic gRPC utilities to a new common library.
- Breaking Change: we accidentally left two functions in the public API,
they are now removed. These functions were used to convert
google::cloud::storage::ServiceAccount
classes to and from JSON objects. - Breaking Change: we removed the functions in
google::cloud::storage::IdempotencyPolicy
forinternal::InsertObjectStreamingRequest
. This class is no longer used and the functions are unnecessary. This breakage only affects applications that define a customIdempotencyPolicy
. - bug: Fixed
WriteObject()
to actually retry the upload for each chunk, not just retry the creation of the upload session. - feature: add examples showing how to mock a
google::cloud::storage::Client
. - feature: allow applications to load service account credentials from the standard locations, but also change the scopes and subject as the credentials are loaded. Thanks to @timford for contributing this fix.
- bug: resuming an already finalized upload was not working correctly. Now the library restores the stream, but the stream is immediately closed (it is incorrect to write more data), and has the object metadata immediately available. Thanks to @Jseph for contributing this fix.
- bug: on Windows,
storage::Client::UploadFile()
andstorage::Client::DownloadFile()
were always treating the files as text, which meant their contents were transformed in unexpected ways. They are now always treated as binary. - bug: we were still leaking a few macros from the nlohmann json library to the user's namespace. This is now fixed. Thanks to @remyabel for helping us with this.
- feature: reduce data copies during download.
- bug: return an error if the IAM bindings contain unknown fields, previously the library was discarding these fields.
- Several internal cleanups, such as fixing constant names to match the Google
Style Guide, simplify the generation of version metadata, make the integration
tests more reliable by using several service accounts for each run, use
-Wextra
in our builds, and a few more.
- Breaking Changes
- The return type for WaitForConsistencyCheck() was a
future<StatusOr<bool>>
where most related functions return abigtable::Consistency
enum. Table::CheckAndMutateRow
returnsStatusOr<bool>
to indicate which branch of the predicate was taken in the atomic change. Meanwhile,AsyncCheckAndMutateRow()
returned afuture<StatusOr<proto-with-long-name>>
. Changed the async and sync versions to returnfuture<StatusOr<MutationBranch>>
.MutationBranch
is anenum
asStatusOr<bool>
is too eay to use incorrectly.- Removed the
Collection
template parameter fromTable::SampleRows
. - Fixed the last function,
WaitForConsistencyCheck
, that returnedstd::future
to returngoogle::cloud::future<>
. The function name changed too, to be more consistent with similar functions. - Remove all the "strong types" for bigtable, such as
InstanceId
,ClusterId
,TableId
, etc. This changed some of the constructors forbigtable::Table
and several member functions inbigtable::Table
,bigtable::TableAdmin
, andbigtable::InstanceAdmin
.
- The return type for WaitForConsistencyCheck() was a
- Changes:
- Implemented TableAdmin::AsyncWaitForConsistency.
- Implemented Table::AsyncReadRows.
- DeleteAppProfile defaults to
ignore_warnings=true
.
- Implemented option to read an object starting from an offset.
- Automatically restart downloads on error. With this change the download is restarted from the last received byte, and using the object generation used in the original download as well. (#2693)
- Bugfixes:
- Service account credentials not refreshing properly. (#2691)
- Fix build for macOS+CMake. (#2698)
- WriteObject now supports empty streams. (#2714)
- Breaking Changes
- Return
google::cloud::future
fromInstanceAdmin
functions: this is more consistent with all other functions returning futures. - Remove unused
bigtable::GrpcError
: the library no longer raises this exception, any code trying to catch the exception should be modified to handle errors viaStatusOr<T>
. - Remove Snapshot-related functions, tests, examples, etc.: this is functionality in Cloud Bigtable was controlled by an allow-list, and it is no longer expected to reach GA.
- Return
- Continue to implement more async APIs (
Async*()
methods) for theInstanceAdmin
,TableAdmin
, andTable
classes (Note: These are not yet stable) - Bugfixes:
- Need
ignore_warnings
to actually delete an AppProfile. - Fix portability/logical errors in shell scripts.
- Fix a race condition in
MutationBatcher
.
- Need
- Implemented a number of previously missing code samples.
- Support move-only callables in
future<T>
- Avoid
std::make_exception_ptr()
infuture_shared_state_base::abandon()
.
- Declared GA and updated major number.
- Support signed policy documents.
- Support service account key files in PKCS#12 format (aka
.p12
). - Support signing URLs and policy documents using the SignBlob API, this is useful when using the default service account in GCE to sign URLs and policy documents.
- Use SFINAE to constrain applicability of the BulkMutation(M&&...) ctor.
- Avoid std::make_exception_ptr() when building without exceptions.
- Breaking change:
Table::BulkApply
now returns astd::vector<FailedMutation>
instead of throwing an exception. - In the future we will remove all the
google::cloud::bigtable::noex::*
classes. We are moving the implementation togoogle::cloud::bigtable::*
. - Continuing to implement more async APIs (Note: These are not yet stable):
InstanceAdmin::AsyncDeleteInstance
Table::AsyncCheckAndMutateRow
TableAdmin::AsyncDeleteTable
TableAdmin::AsyncModifyColumnFamilies
BulkMutator
now returns more specific errors instead of generic UNKNOWN.- Improved install instructions, which are now tested with our CI builds.
- CMake-config files now work without
pkg-config
. - Removed the googleapis submodule. The build system now automatically downloads all deps.
- No longer throw exceptions from
ClientOptions
.
- Removed the googleapis submodule. The build system now automatically downloads all deps.
- Added initial support for HMAC key-related functions.
- Added support for V4 signed URLs.
- Improved install instructions, which are now tested with our CI builds.
- CMake-config files now work without
pkg-config
. - No longer throw exceptions from
ClientOptions
. - Handle object names with slashes.
- Added
ObjectMetadata::set_storage_class
- Added support for policy documents.
- Breaking change: Return
StatusOr<>
fromTableAdmin
andInstanceAdmin
operations to signal errors. - Add streaming to
(Async)BulkMutator
. - Implement a helper class (
MutationBatcher
) to automatically batch and manage outstanding bulk mutations. - Add
bigtable::Cell
constructors without labels argument. - Implementation of
RowSet
example using discontinuous keys. List{Instances,Clusters}
returnfailed_locations
.- First version of async
Apply
batching. - Keep
Apply
callbacks inMutationData
.
- Breaking change: Make
google::cloud::optional::operator bool()
explicit. - Add
google::cloud::optional
value conversions that matchstd::optional
. - Stop using grpc's
DO_NOT_USE
enum. - Remove ciso646 includes to force traditional spellings.
- Change
std::endl
->"\n"
. - Enforce formatting of
.cc
files.
- Properly handle subresources in V2 signed URLs.
- Allow specifying non-default
ServiceAccountCredentials
scope and subject. - Add
make install
instructions. - Change the storage examples to throw a
std::runtime_error
on failure. - Add Bucket Policy Only samples.
- No changes from v0.6.0
- No changes from v0.6.0
- The library is now Beta. We no longer expect changes to the API.
- No other changes from v0.6.0
- Moved repo organization from GoogleCloudPlatform -> googleapis.
- Implemented several more async functions.
- Breaking change: Started migrating functions to
StatusOr
and away from throwing exceptions. - Several fixes to bulk mutator (#1880)
- Disabled
make install
for external projects. Row
now has a move constructor.- Increased default message length limit.
- Now testing build with libc++ on Linux.
- Fixed some bugs found by Coverity scans.
- Fixed some documentation.
- Breaking change: Removed
StatusOr<void>
. - Updated
StatusOr
documentation. - Fixed some (minor) issues found by coverity.
- Breaking change: Removed almost all exception throwing in favor of
StatusOr<T>
return values. - Lots of cleanup to documentation and example code.
- Avoids use of
StatusOr::value()
when the validity was already checked. Client::ListBuckets()
now directly returnsListBucketsReader
, because it cannot fail soStatusOr
was not needed.- Removed support for
StatusOr<void>
; changed usages to returnStatus
instead. - 502s are now retryable errors from GCS.
- Breaking change:
LockBucketRetentionPolicy
returns aBucketMetadata
now instead ofvoid
. - Cleaned up documentation and example code.
- Disabled
make install
for external projects. - Moved repo organization from GoogleCloudPlatform -> googleapis.
- Moved some internal-only APIs out of public interfaces.
- Fixed resuming uploads when the server responds with a 308.
- Restore support for gcc-4.8.
- @remyabel cleaned up some hard-coded zone names in the examples.
- More experimental asynchronous APIs, including AsyncReadRows. Note that we expect to change all these experimental APIs as described in #1543.
- @remyabel contributed changes to disable the unit and integration tests. This can be useful for package maintainers.
- New Bigtable filter wrapper that accepts a single column.
- Breaking Change: remove the
as_proto_move()
member functions in favor ofas_proto() &&
. With the latter newer compilers will warn if the object is used after the destructive operation.
- Support compiling with gcc-4.8.
- Fix
GCP_LOG()
macro so it works on platforms that define aDEBUG
pre-processor symbol. - Use different PRNG sequences for each backoff instance, previously all the clones of a backoff policy shared the same sequence.
- Workaround build problems with Xcode 7.3.
- Try to use the exception mask in the IOStream classes
(
storage::ObjectReadStream
andstorage::ObjectWriteStream
). This allows applications to check errors locally viardstate()
. Note that applications that disable exceptions altogether must check thestatus()
member function for these IOStream classes. It is impossible to set therdstate()
for all failures when exceptions are disabled. - Support reading only a portion of a Blob.
- Support building with gcc-4.8.
- Many internal changes to better support applications that disable exceptions. A future release will include APIs that do not raise exceptions for error conditions.
- @remyabel contributed changes to disable the unit and integration tests. This can be useful for package maintainers.
- Implement a function to create signed URLs (
Client::CreateV2SignedUrl
). - Support resumable uploads in any upload operation.
- More experimental asynchronous APIs, note that we expect to change all these experimental APIs as described in #1543.
- Most of the admin operations now have asynchronous APIs.
- All asynchronous APIs in
noex::*
return an object through which applications can request cancellation of pending requests. - Prototype asynchronous APIs returning a
google::cloud::future<T>
, applications can attach callbacks and/or block on agoogle::cloud::future<T>
.
- Implement
google::cloud::future<T>
andgoogle::cloud::promise<T>
based on ISO/IEC TS 19571:2016, the "C++ Extensions for Concurrency" technical specification, also known as "futures with continuations".
- Use resumable uploads for large files in
Client::UploadFile()
. - Implement support for the
userIp
optional query parameter. - BREAKING CHANGE
Client::RewriteObject()
,Client::CopyObject()
, andClient::ComposeObject
no longer require theObjectMetadata
argument. Instead useWithObjectMetadata()
, which can be omitted if you do not need to set any metadata attributes in the new object. - When using OpenSSL-1.0.2 the client library needs to configure the locking callbacks for OpenSSL. However, the application may disable this behavior if the application developer is going to use their own locking callbacks.
- When refreshing OAuth2 access tokens the client library uses the same retry and backoff policies as used for the request itself.
- Applications can set object metadata attributes via the
WithObjectMetadata
optional argument toClient::InsertObjectMedia()
. - Applications can configure the library to only retry idempotent operations.
- The client library can use Google Compute Engine credentials to access the service.
- More experimental asynchronous APIs, note that we expect to change all these experimental APIs as described in #1543.
- Most of the admin operations now have asynchronous APIs.
- All asynchronous APIs in
noex::*
return an object through which applications can request cancellation of pending requests. - Prototype asynchronous APIs returning a
google::cloud::future<T>
, applications can attach callbacks and/or block on agoogle::cloud::future<T>
.
- Implement
google::cloud::future<T>
andgoogle::cloud::promise<T>
based on ISO/IEC TS 19571:2016, the "C++ Extensions for Concurrency" technical specification, also known as "futures with continuations".
- Use resumable uploads for large files in
Client::UploadFile()
. - Implement support for the
userIp
optional query parameter. - BREAKING CHANGE
Client::RewriteObject()
,Client::CopyObject()
, andClient::ComposeObject
no longer require theObjectMetadata
argument. Instead useWithObjectMetadata()
, which can be omitted if you do not need to set any metadata attributes in the new object. - When using OpenSSL-1.0.2 the client library needs to configure the locking callbacks for OpenSSL. However, the application may disable this behavior if the application developer is going to use their own locking callbacks.
- When refreshing OAuth2 access tokens the client library uses the same retry and backoff policies as used for the request itself.
- Applications can set object metadata attributes via the
WithObjectMetadata
optional argument toClient::InsertObjectMedia()
. - Applications can configure the library to only retry idempotent operations.
- The client library can use Google Compute Engine credentials to access the service.
This is the v0.3.0 release of the Google Cloud C++ Client Libraries.
- Experimental asynchronous APIs.
- Include an example that illustrates how to use OpenCensus and the Cloud Bigtable C++ client library.
- Several cleanups around dependency management with CMake.
- Jason Zaman contributed improvements and fixes to support soversion numbers with CMake.
- Lots of improvements to the code coverage in the examples and tests.
- Fixed multiple documentation issues, including a much better landing page in the Doxygen documentation.
google::cloud::optional<T>
an intentionally incomplete implementation ofstd::optional<T>
to support C++11 and C++14 users.- Applications can configure
google::cloud::LogSink
to enable logging in some of the libraries and to redirect the logs to their preferred destination. The libraries do not enable any logging by default, not even tostderr
. google::cloud::SetTerminateHandler()
allows applications compiled without exceptions, but using the APIs that rely on exceptions to report errors, to configure how the application terminates when an unrecoverable error is detected by the libraries.
- Automatically compute MD5 hashes and CRC32C checksums when objects are uploaded and downloaded. Any hash or checksum mismatched results in an exception. Applications can MD5 hashes, CRC32C checksums or both on any request.
- Parse Bucket lock and retention policy attributes in object and bucket metadata.
- Add APIs to upload and download files with a single function call.
- Improved the error messages generated when the credentials file is missing or has invalid contents.
- Jason Zaman contributed improvements and fixes to support soversion numbers with CMake.
- Experimental asynchronous APIs.
- Include an example that illustrates how to use OpenCensus and the Cloud Bigtable C++ client library.
- Several cleanups around dependency management with CMake.
- Jason Zaman contributed improvements and fixes to support soversion numbers with CMake.
- Lots of improvements to the code coverage in the examples and tests.
- Fixed multiple documentation issues, including a much better landing page in the Doxygen documentation.
google::cloud::optional<T>
an intentionally incomplete implementation ofstd::optional<T>
to support C++11 and C++14 users.- Applications can configure
google::cloud::LogSink
to enable logging in some of the libraries and to redirect the logs to their preferred destination. The libraries do not enable any logging by default, not even tostderr
. google::cloud::SetTerminateHandler()
allows applications compiled without exceptions, but using the APIs that rely on exceptions to report errors, to configure how the application terminates when an unrecoverable error is detected by the libraries.
- Automatically compute MD5 hashes and CRC32C checksums when objects are uploaded and downloaded. Any hash or checksum mismatched results in an exception. Applications can MD5 hashes, CRC32C checksums or both on any request.
- Parse Bucket lock and retention policy attributes in object and bucket metadata.
- Add APIs to upload and download files with a single function call.
- Improved the error messages generated when the credentials file is missing or has invalid contents.
- Jason Zaman contributed improvements and fixes to support soversion numbers with CMake.
This is the v0.2.0 release of the Google Cloud C++ Client Libraries.
- Status: Beta.
- All data manipulation and admin APIs are implemented.
- All APIs have documentation and short examples showing how to use them.
- The API is not expected to change before 1.0
This is the v0.1.0 release.
- Status: Alpha.
- All synchronous APIs for data manipulation and for table administration are implemented.
- All APIs have integration tests and short examples.
This is the second pre-release of v0.1.0, to further refine the process.
- All synchronous APIs for data manipulation and table administration are implemented.
- We want to add better examples and additional unit tests to wrap up v0.1.0.
This release is mainly created so we can fine tune the process of creating releases. The relevant notes are:
- Synchronous API for data operations largely complete, only
SampleRowKeys()
andReadModifyWrite()
are missing. - Synchronous API for table admin operations is complete.