Skip to content

Releases: googleapis/google-cloud-cpp

v1.24.0 Release

02 Feb 03:04
aa01568

Choose a tag to compare

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_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)

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

15 Jan 06:50
230cd07

Choose a tag to compare

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 the google-cloud-cpp libraries.

v1.22.0 Release

07 Jan 21:05
c8e7d91

Choose a tag to compare

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

  • 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)

v1.21.0 Release

01 Dec 21:54
e96b6f8

Choose a tag to compare

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

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

  • 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)

v1.20.0 Release

03 Nov 16:20
88d7735

Choose a tag to compare

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::SubscriptionOptions to pubsub::SubscriberOptions as these
    are bound to a specific subscriber object.

  • Change the pubsub::Subscriber API. A Subscriber is now bound to a specific
    Cloud Pub/Sub subscription, with a fixed set of SuscriptionOptions, just
    like a pubsub::Publisher is 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
    SubscriptionOptions to SubscriberOptions 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, removing
    Mutation 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.

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

  • Fixed occasional crash on background thread shutdown (#5324)
  • GCP_LOG now serializes its output to std::clog (#5179)

v1.19.0 Release

01 Oct 15:25
d10f8bf

Choose a tag to compare

Storage

  • fix(storage): consistent computation of XML vs. JSON (#5095)
    The interaction of ClientOptions::set_endpoint() and the
    CLOUD_STORAGE_TESTBENCH_ENDPOINT environment variable was inconsistent
    across endpoints. For JSON endpoints set_endpoint() overrode the
    CLOUD_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)

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

15 Sep 22:09
f119fd4

Choose a tag to compare

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 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)

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

02 Sep 21:36
8a4db1a

Choose a tag to compare

  • fix(pubsub): build with MSVC+x86 (#5012)

v1.17.0 Release

02 Sep 16:57
8acd9c3

Choose a tag to compare

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.

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

  • 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)

v1.16.0 Release

04 Aug 04:21
2a0aeef

Choose a tag to compare

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::RunAsync with no arguments (#4450)

Storage

BREAKING CHANGES

  • fix!: incorrect type in OLM condition (#4597)
    changed the created_before field in LifecycleRuleCondition 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 to RawClient (#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 and UploadLimit to UploadFile (#4473)
  • feat: HTTP requests with many buffers (#4480)
  • feat: Add value_or() to options params and headers (#4408)

Spanner

BREAKING CHANGES

  • refactor!: spanner::Timestamp implementing using absl::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 old
    spanner::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)

Common libraries

BREAKING CHANGES

  • fix!: incorrect type in OLM condition (#4597)
    changed the created_before field in LifecycleRuleCondition 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)