Releases: googleapis/google-cloud-cpp
v1.24.0 Release
NOTE:
We are clarifying our approach to backwards compatibility beyond the C++ API.
See the README.md on GitHub for details
Bazel
- Starting with this release the legacy targets, such as
//google/cloud/pubsub:pubsub_clientare 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)
Bigtable
- feat(bigtable): restore from backups in other instance (#5754)
- feat(bigtable): better control over channel refresh (#5753)
Spanner
No user-facing changes.
Storage
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)
Common Libraries
BREAKING CHANGES:
- refactor!: removed old bigquery code (#5722)
v1.23.0 Release
Common Libraries
- fix: crashes during client shutdown (#5701)
Bigtable
- 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 thegoogle-cloud-cpplibraries.
v1.22.0 Release
Bigtable
- 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)
Pub/Sub
- feat(pubsub): add equality to Publisher (#5608)
Storage
- 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)
Spanner
- cleanup: rename spanner::internal to spanner_internal (#5620)
- fix: get the code to compile with MSVC 2017 (#5574)
Common Libraries
v1.21.0 Release
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.husing ListBucketsReader = google::cloud::internal::PaginationRange
google/cloud/storage/list_hmac_keys_reader.husing ListHmacKeysReader = google::cloud::internal::PaginationRange
google/cloud/storage/list_objects_and_prefixes_reader.husing ListObjectsAndPrefixesReader = google::cloud::internal::PaginationRange
google/cloud/storage/list_objects_reader.husing ListObjectsReader = google::cloud::internal::PaginationRange
google/cloud/pubsub/subscription_admin_connection.husing ListSubscriptionsRange = google::cloud::internal::PaginationRangeusing ListSnapshotsRange = google::cloud::internal::PaginationRange
google/cloud/pubsub/topic_admin_connection.husing ListTopicsRange = google::cloud::internal::PaginationRangeusing ListTopicSubscriptionsRange = google::cloud::internal::PaginationRangeusing ListTopicSnapshotsRange = google::cloud::internal::PaginationRange
google/cloud/spanner/database_admin_connection.husing ListDatabaseRange = google::cloud::internal::PaginationRangeusing ListBackupOperationsRange = google::cloud::internal::PaginationRangeusing ListDatabaseOperationsRange = google::cloud::internal::PaginationRangeusing ListBackupsRange = google::cloud::internal::PaginationRange
google/cloud/spanner/instance_admin_connection.husing ListInstancesRange = google::cloud::internal::PaginationRangeusing ListInstanceConfigsRange = google::cloud::internal::PaginationRange
Bigtable
- fix(bigtable): missing functions to change policies (#5565)
- feat(bigtable): create logging layer for Cloud Bigtable (#5515)
- docs: document Bigtable thread safety (#5394)
Pub/Sub
- 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 throughtput 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)
Spanner
- feat(spanner): Point-In-Time Recovery (lite) throttled DB update (#5562)
- refactor!: PaginationRange is now an alias to StreamRange (#5538)
Storage
- 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)
Common Libraries
v1.20.0 Release
Bigtable
No user-facing changes.
Pub/Sub
BREAKING CHANGES:
While the Pub/Sub library is not GA, and breaking changes are to be expected, we
are close enough to a GA release that we think highlighting them 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::SubscriptionOptionstopubsub::SubscriberOptionsas these
are bound to a specific subscriber object. -
Change the
pubsub::SubscriberAPI. ASubscriberis now bound to a specific
Cloud Pub/Sub subscription, with a fixed set ofSuscriptionOptions, just
like apubsub::Publisheris bound to a specific topic and a set of
PublisherOptions. 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 rename
SubscriptionOptionstoSubscriberOptionsin 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
PublisherOptionsattributes controlling the
maximum number of messages per batch and the maximum number of bytes per
batch. -
Rename the
{Topic,Snapshot,Subscription}MutationBuilderclasses, removing
Mutationfrom 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.
Spanner
No user-facing changes.
Storage
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
Common Libraries
v1.19.0 Release
Storage
-
fix(storage): consistent computation of XML vs. JSON (#5095)
The interaction ofClientOptions::set_endpoint()and the
CLOUD_STORAGE_TESTBENCH_ENDPOINTenvironment variable was inconsistent
across endpoints. For JSON endpointsset_endpoint()overrode the
CLOUD_STORAGE_TESTBENCH_ENDPOINTvalue, 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)
Spanner
- fix: retry gRPC operations if the connection is unexpectedly terminated (#5087)
- doc(spanner): use custom retry example in the Doxygen docs (#5164)
Pub/Sub
⚠️ 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.
v1.18.0 Release
Storage
- fix: add missing object ACLs in gRPC client (#5029)
- fix: work with unknown SSL version in curl (#5037)
Spanner
- This release includes support for the
NUMERICdata type in Cloud Spanner. - doc: adapt to new specification for NUMERIC samples (#5049)
- doc: add
spanner_query_with_*_parametersamples (#5016) - feat: start using NUMERIC types in database schema (#5025)
Pub/Sub
- 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.
Common Libraries
- 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)
v1.17.1 Release
- fix(pubsub): build with MSVC+x86 (#5012)
v1.17.0 Release
Bigtable
- doc: update quickstart README files (#4980)
Storage
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
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)
Spanner
- 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)
Common Libraries
v1.16.0 Release
Bigtable
- 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::RunAsyncwith no arguments (#4450)
Storage
BREAKING CHANGES
- fix!: incorrect type in OLM condition (#4597)
changed thecreated_beforefield inLifecycleRuleConditionfrom 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
DeleteResumableUploadtoRawClient(#4678) - fix: missing
CreateDefaultClientOptionsoverload (#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
UploadFromOffsetandUploadLimittoUploadFile(#4473) - feat: HTTP requests with many buffers (#4480)
- feat: Add
value_or()to options params and headers (#4408)
Spanner
BREAKING CHANGES
- refactor!:
spanner::Timestampimplementing usingabsl::Time(#4625)
spanner::Timestamp no longer allows construction from or conversion to
a chrono time point with picosecond precision - refactor!: use
absl::CivilDayfor "date" type (#4600)
absl::CivilDay'sconstructors are explicit (by design), where as the old
spanner::Date3-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_begintransaction in Rollback() (#4731) - fix: handle
ExecuteBatchDmlreturning 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
ConnectionImplmethods - feat: store a Status when invalidating Transactions (#4670)
- feat: support moving a
Transactioninto an error state (#4545)
Other Changes
- doc: note that NUMERIC columns are not yet available (#4738)
- feat: add
google-cloud-resource-prefixto 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)
Common libraries
BREAKING CHANGES
- fix!: incorrect type in OLM condition (#4597)
changed thecreated_beforefield inLifecycleRuleConditionfrom a time
point to a date
Other Changes