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 the google::cloud::spanner_admin
namespace. Starting with
the v1.32.0 release, and depending on your compiler settings, using the old
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
and gcpcxxV1
that are declared in google/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 of use
google::cloud::v1::Status
google::cloud::Status
. Please update your code to avoid naming the v1
and
gcpcxxV1
inline namespace names before 2022-11-01. For more info, see
#7463 and #5976.
2022-12-01: remove the `GOOGLE_CLOUD_CPP_STORAGE_USE_LEGACY_HTTP` env var.
Support for the `GOOGLE_CLOUD_CPP_STORAGE_USE_LEGACY_HTTP` env var is scheduled to be removed ([9659](googleapis#9659)). The legacy http implementation will also be removed.
2023-02-01: remove `BigQueryReadReadRowsStreamingUpdater` from `google::cloud::bigquery` namespace
On 2023-02-01 (or shortly after) we will remove
BigQueryReadReadRowsStreamingUpdater
from its declaration in
google/cloud/bigquery/read_connection.h
and from the google::cloud::bigquery
namespace. The function continues to exist but in an internal file and
namespace. For status on this see #8234.
2023-05-01: mark `bigtable::DataClient` as `final`
On 2023-05-01 (or shortly after) we will mark bigtable::DataClient
as final
and remove the following member functions:
DataClient::Channel()
DataClient::reset()
DataClient::BackgroundThreadsFactory()
Application developers should not need to interact with this class directly.
Please use google::cloud::bigtable::MakeDataClient(...)
with the options from
google::cloud::GrpcOptionList<>
if you need to configure the gRPC channel or
background threads. More details can be found in #8800.
2023-05-01: remove `bigtable::RowReader` constructors
On 2023-05-01 (or shortly after) we will remove bigtable::RowReader
constructors which accept DataClient
as an argument.
Application developers who read rows by directly constructing a RowReader
object should instead construct a Table
object and call Table::ReadRows(...)
on it.
For status on this, see #8854.
2023-06-01: remove the Cloud Debugger Library
Sometime after 2023-05-31 the Cloud Debugger service (aka Stackdriver Debugger API) will be shutdown. Once the service is shutdown the corresponding library cannot be of any use, and we plan to remove it without changing the major version number.
2023-06-01: remove `spanner::MakeTestRow()`
On 2023-06-01 (or shortly after) we will remove spanner::MakeTestRow()
, which
has been replaced by spanner_mocks::MakeRow()
. Starting with the v1.41.0
release, and depending on your compiler settings, using spanner::MakeTestRow()
may elicit a deprecation warning. See #9086 for more details.
We have stopped testing with MSVC 2017. Microsoft stopped mainstream support for
MSVC 2017 in 2022-04.
We continue to test with MSVC 2022 and MSVC 2019. We recommend that you update
to one of these versions to use more recent versions of the google-cloud-cpp
libraries. Note that, in accordance with Google's
Foundational C++ support policy, the other Google libraries
have stopped (or shortly will stop) testing with MSVC 2017.
We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
- fix(bigtable): retries for CheckConsistency / AsyncWaitForConsistency (#10955)
- docs(bigtable): clean up CreateTable sample (#10844)
- feat(datacatalog): generate lineage library (#10977)
The library has been expanded to include the KMS Inventory API.
- fix(pubsub): no warnings on
ack()/nack()
success (#10920) - fix(pubsub): fewer default threads for 32-bit builds (#10793)
The library has been expanded to include the TPU v2 API.
We have introduced versioned clients for many services. The version is that of
the GCP service. While this naming convention is more verbose, it allows us to
support clients for multiple versions of a GCP service from within the same
library (e.g. speech_v1::SpeechClient
and speech_v2::SpeechClient
). See
#10170 for more details.
- fix: retries for GetIamPolicy, TestIamPermissions (#10957)
- doc: improve description for "terminate" group (#10950)
- fix(common): fewer spurious warnings in the log (#10811)
We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
- Replaced the wrappers for google.pubsub.v1.SchemaServiceClient with automatically generated code. Our telemetry indicates that there are no C++ applications using this code, and therefore we do not consider this a breaking change.
- fix reference links in documentation (#10687, #10684)
- fix: interface proto libraries work with older CMake (#10636)
- fix(common): missing Abseil deps in pkgconfig (#10616)
- doc: declutter generated README files (#10562)
- doc(common): in-depth guide for
StatusOr
(#10555) - doc: remove boilerplate from landing page snippet (#10537)
- doc(common): use real Doxygen groups (#10504)
- fix(generator): correct doxygen comments (#10500)
The library has been expanded to include the following services:
The library has been expanded to include the IAM v2 API. This API includes support for IAM Deny policies.
- fix: add missing includes (#10421)
- fix: remove duplicate protos (#10486)
- fix(storage): better error code for CreateBucket() and 409 errors (#10480
- fix: add missing includes (#10421)
- fix(storage): scopes should disable self-signed JWTs (#10369)
- doc(storage): document all
oauth2
names as deprecated (#10352)
- fix: remove duplicate protos (#10486)
- fix: remove duplicate protos (#10486)
- fix: add missing includes (#10421)
- feat(common): support external accounts (#10465) (#10430) (#10357)
- feat(common): options for
Make*Credentials()
(#10417) - feat: support logging for unified Rest credentials (#10412)
NOTE
- feat!: We have dropped the experimental marker from bidirectional streaming APIs (#10340). The APIs in question are:
bigquery::BigQueryWriteClient::AsyncAppendRows()
dialogflow_cx::SessionsClient::AsyncStreamingDetectIntent()
dialogflow_es::ParticipantsClient::AsyncStreamingAnalyzeContent()
dialogflow_es::SessionsClient::AsyncStreamingDetectIntent()
logging::LoggingServiceV2Client::AsyncTailLogEntries()
speech::SpeechClient::AsyncStreamingRecognize()
If you use any of these APIs, you must drop the ExperimentalTag
in your code, accordingly.
We are happy to announce the following GA library. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
- samples(bigtable): build admin samples with cmake (#10246)
- doc(bigtable): create page for configuration options (#10197)
- feat(logging): generate
AsyncWriteLogEntries()
(#10194)
- feat(pubsub): add option to override subscription (#10327)
- feat(pubsub): blocking pulls (#10317)
- doc(pubsub): create page for configuration options (#10198)
- doc(spanner): deprecate old MakeConnection() overloads (#10284)
- fix(spanner): tweak the tag name of a FGAC sample (#10266)
- samples(spanner): build admin samples with cmake (#10247)
- feat(spanner): tests and samples for DML RETURNING (#10233)
- doc(spanner): create page for configuration options (#10199)
- feat(speech): generate speech v2 (#10228)
- doc(storage): create page for configuration options (#10200)
- doc: another pass on authentication components (#10300)
- fix(common): create default gRPC credentials only if needed (#10280)
- doc: group client functions (#10268)
- doc: use qualified client name in samples (#10241)
- fix(common): avoid globals for easier DLLs (#10212)
- feat: support a pre-release component of the version string (#10181)
- doc(common): add Doxygen group for common options (#10192)
- doc(common): add overview section (#10193)
- doc: better guidance for authentication samples (#10184)
We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
In addition, these existing libraries are now GA:
- doc: add endpoint override snippets to generated libs (#10129)
- feat(bigquery): add migration service (#10034)
- doc(bigtable): add
*Client
samples (#10149) - feat(bigtable): support
GOOGLE_CLOUD_ENABLE_DIRECT_PATH
(#9978)
- doc: add endpoint override snippets to generated libs (#10129)
- doc(pubsub): samples for endpoint and auth (#10136)
- feat(pubsub): install pubsub_mocks pkg (#10008)
- feat(pubsub): implement blocking publisher (#10055)
- feat(pubsub): implement per-call options for
Subscriber
(#10043) - fix(pubsub): limit
ModifyAckDeadlineRequest
size (#10032) - fix(pubsub): faster shutdowns for
Publisher
(#9991)
- doc(spanner): add
*Client
samples (#10145) - feat(spanner): add support for RowStream::RowsModified() (#10102)
- feat(spanner): support for the PG.JSONB data type (#10098)
- doc(storage): common initialization examples (#10107)
- fix(rest): too many debug headers (#10054)
- fix(rest): return complete payloads for errors (#10051)
- feat(storage): support
Autoclass
feature (#10003) - feat(storage): faster
InsertObject()
uploads (#9997) - fix(storage): respect MIME message boundary size limits (#9965)
- feat(generator): generate authentication example (#10138)
- doc: workaround Doxygen formatting quirk (#10137)
- doc: add endpoint override snippets to generated libs (#10129)
- feat(generator): generate simple samples for
*Client
(#10118) - feat: add mock library w/ StreamRange (#9998)
- doc(common): make authentication docs easier to find (#10110)
- fix: configure context in async retries (#10100)
- doc: document when GrpcNumChannelsOption applies (#10000)
- feat(generator): make idempotency policy non-abstract (#9981)
- fix(common): preserve
ErrorInfo
on retry errors (#9971)
We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
The library has been expanded to include Analytics Hub, an API that facilitates data sharing within and across organizations. (#9882)
- fix(spanner): remove session from pool upon "not found" refresh failure (#9954)
- feat(spanner): add support for Customer Managed Multi-Region (CMMR) read-only replicas at instance creation time (#9872)
- feat(storage): easier mocks for
HmacKeyMetadata
(#9949) - feat(storage): easier mocks for
*AccessControl
(#9910) - feat(storage): easier mocks with
ObjectMetadata
(#9899) - fix(storage): decay type before testing supported-options membership (#9893)
- feat(storage): easier mocks with
BucketMetadata
(#9886) - fix(storage): error message for resumable uploads (#9855)
- feat(storage): release
*StallMinimumThroughputOption
(#9813) - fix(storage): no workaround needed with libc++ and MSVC (#9768)
- fix(common): better defaults for curl initialization (#9798)
We are introducing new client libraries for 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.
We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
Expand to see the full list of new GA libraries...
- fix(bigtable):
DataConnection
refreshes channels (#9718) - fix(bigtable): Use retry policy on all streams with failing mutations (#9706)
- feat(bigtable): per-operation Options (#9627) (#9623)
- feat(dataproc): mark the dataproc services as location dependent (#9722)
- feat(spanner): fine-grained access control (#9669)
- feat(spanner): equality for copyable classes (#9648)
- We have a new implementation for HTTP requests. This new implementation
provides comparable download performance, and improves some uploads. See
#9659 for details. We have rigorously tested this new implementation. In the
unlikely event that this new implementation breaks your application, we have
included an environment variable to revert to the legacy implementation. Set
GOOGLE_CLOUD_CPP_STORAGE_USE_LEGACY_HTTP
to any value to use the legacy implementation. We are planning to remove the legacy code and theGOOGLE_CLOUD_CPP_STORAGE_USE_LEGACY_HTTP
environment variable by 2022-12. - feat(storage): improve error messages on stalled uploads (#9744)
- feat(storage): equality for Native IAM types (#9649)
- feat(storage): SA credentials default to self-signed JWTs (#9629)
- feat: group GUAC
Options
in anOptionsList
(#9643) - fix(rest): cache credentials (#9620)
- doc: add table of contents to landing page (#9671)
We are introducing new client libraries for 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.
- fix(assuredworkloads): reenable on windows (#9467)
- fix(bigtable): the mocks library is no longer header-only (#9568)
- fix(asset): reenable on macOS (#9468)
- fix(pubsub): missing subscription name in lease extensions (#9523)
- feat(pubsub): exactly-once delivery (#9436)
- fix(spanner): avoid evaluation-order issue in function arguments (#9452)
- doc(debugger): announce deprecation (#9552)
- feat(storage): experimental options to tune stall timeouts (#9593)
- feat(storage): add debugging headers to
ObjectWriteStream
(#9580) - fix(storage): no char for
std::uniform_int_distribution
(#9509) - feat(storage): support Bucket custom placement config (#9481)
- feat(common): make the RPC log even more readable (#9561)
- feat: improve error messages for access token errors (#9485)
- feat(common): make the RPC log even more readable (#9477)
BREAKING CHANGES
As previously announced, google-cloud-cpp
now requires C++ >= 14. This is
motivated by similar changes in our dependencies, and because C++ 14 has been
the default C++ version in all the compilers we support for several years.
We think this change is large enough that deserves a major version bump to signal the new requirements.
If you are already using C++ >= 14 you need to make no changes. If you are using C++11: please consider updating as soon as possible. To ease your transition to C++ >= 14 we will, if requested, backport critical fixes to v1.42.0 until 2023-07-01. After 2023-07-01 we will drop all support to v1.42.0 and earlier versions.
Debian 9 (Stretch) is EOL
Debian 9 (Stretch) reached EOL on 2022-06-30. Therefore, we have stopped testing or supporting this distribution. This was the last distribution we supported that required GCC < 7.3, and/or CMake < 3.10. Starting with this release we require CMake >= 3.10, and only test with GCC >= 7.3.
OTHER CHANGES
We introduced a new constructor for Table
which accepts a
DataConnection
instead of a DataClient
. The DataConnection
is a new
interface that more closely matches the client surface of Table
. Read more
about *Connection
classes in our
Architecture Design document.
The new API greatly simplifies mocking. Every Table::Foo(..)
call has an
associated DataConnection::Foo(...)
call. This allows you to set expectations
on the exact values returned by the client call. See
Mocking the Cloud Bigtable C++ Client for a complete
example on how to mock the behavior of Table
with
bigtable_mocks::MockDataConnection
.
The new DataConnection
API offers more consistency across our libraries. It
also enables the use of some common library features, such as our
UnifiedCredentialsOption
. Also, any new features will be added to
the DataConnection
API first.
No. If the benefits are not appealing enough, you do not need to update your
code. All code that currently uses DataClient
will continue to function as
before. This includes uses of testing::MockDataClient
.
However, if you are using testing::MockDataClient
to mock the behavior of
Table
in your tests:
- Be aware that we have announced our intention to remove classes derived from
DataClient
on or around 2023-05. Your tests will break then. - Please consider using
bigtable_mocks::MockDataConnection
. It will greatly simplify your tests.
See Migrating from DataClient
to DataConnection
.
- doc(bigtable): how to mock the Data API (#9415)
- feat(bigtable): modern
Table
constructor (#9403) - feat(generator): support explicit routing headers (#9368)
- fix(bigtable)!: pass app profile id to connection as options (#9388)
- feat(bigtable): add
AppProfileIdOption
(#9382) - feat(bigtable): table resource name as a class (#9377)
- feat(bigtable): instance name as a class (#9374)
- feat(bigtable): introduce
MockDataConnection
andMakeTestRowReader
(#9335) - feat(bigtable): introduce
DataConnection
(#9323) - feat(bigtable): modern Data API policy options (#9320)
- doc(pubsub): improve documentation for
*AckHandler
(#9404) - feat(pubsub): update subscription builders (#9326)
- fix(generator): handle explicit routing params for nested fields (#9408)
- feat(common): truncation support for plain strings in the RPC log (#9351)
We are introducing a new client library. While we do not anticipate any API changes to this library before declaring it GA, we are releasing it early in case it elicits some feedback that requires changes.
We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
- feat(bigtable): add
AsyncWaitForConsistency()
helper for Table Admin (#9310) - doc: broken link in Bigtable README (#9265)
- feat(pubsub): implement per-batch compression (#9270)
- feat(common): include status error payloads in the RPC log (#9186)
- feat(common): include status error payloads in the RPC log (#9186)
- doc: broken link in GCS README file (#9264)
- fix(storage): respect policies in deprecated constructor (#9255)
- fix: handle transient failures in the GCE credentials (#9252)
- fix: relax parsing for GCE informational fields (#9251)
- feat(storage): per-operation options for
Client
(#9220) (#9214) (#9209) (#9208) (#9207) (#9206) (#9205) (#9204) (#9203) (#9202) (#9199) (#9247) - fix(storage): do not duplicate debugging headers (#9162)
- fix(storage): disable MSVC C++17 deprecation warnings (#9143)
- doc(storage): missing options for several functions (#9146)
- feat(common): include status error payloads in the RPC log (#9186) (#9169)
- fix(common): workaround GCC "ambiguous" overload errors (#9144)
- fix(common): compile with GCC (MinGW-w64) under Windows (#9140)
- fix(bigtable): remove unnecessary sleeps from BulkApply (#9091)
- feat(bigtable): configure
*Client
s withEndpointOption
(#9082) - feat(bigtable): default construct a RowReader (#8958)
- doc(bigtable): compiler warnings for ClientOptions (#8914)
- doc(bigtable): deprecate RowReader public ctors (#8887)
- doc(bigtable): deprecate AsyncRowReader (#8870)
- fix(documentai): make quickstart functional (#9108)
The library has been expanded to include IAM Policy, an API to grant, change, and revoke access to all GCP resources that accept allow policies.
- feat(monitoring): generate async version of
CreateTimeSeries()
(#8983)
- doc(pubsub): fix typos Pub/Sub vs. Pubsub (#9034)
- doc(pubsub): implement IAM examples (#8917)
- doc(pubsub): deprecate
SubscriberOptions
(#8916) - doc(pubsub): deprecate
PublisherOptions
(#8911) - doc(pubsub): deprecate functions consuming
ConnectionOptions
(#8900)
- doc(spanner): add a comment about building a "NaN" PgNumeric (#8891)
- feat(spanner): spanner::Value support for spanner::PgNumeric (#8872)
- feat(spanner): add support for spanner::PgNumeric (#8856)
- feat(storage): implement suffix and prefix OLM rules (#9030)
- feat(storage): helper functions for new lifecycle action (#9028)
- fix: format multiple scopes correctly in service account assertions (#8975)
- fix(storage): avoid crashes when parsing
ErrorInfo
(#8968) - fix(storage): all
HmacKey
requests acceptUserProject
(#8928) - fix(storage): handle full but not finalized uploads (#8896)
- fix(storage): resume "gunzipped" downloads (#8894)
- fix(storage): use Status for
CurlHandle::SetOption()
(#8871) - fix(storage): set buffersize once per handle (#8865)
BREAKING CHANGES
- We have changed the preference order for determining the service endpoint from
(1)
${emulator_env}
, (2)EndpointOption
, (3)${endpoint_env}
, and (4) default value, to (1)${emulator_env}
, (2)${endpoint_env}
, (3)EndpointOption
, and (4) default value. That is, the more dynamic${endpoint_env}
is now preferred over anyEndpointOption
set in the code.
Other Changes:
- doc: links to other libraries preserve version (#9112)
- docs: document connection and mock connection (#9084)
- feat(generator):
SetIamPolicy()
can be idempotent (#9078) - fix(common): compilation error with coroutines and futures (#9046)
- fix: support absolute paths for
CMAKE_INSTALL_*DIR
(#9022) - fix(generator): missing #include in generated code (#8979)
- fix(common): compile with storage and without gRPC (#8923)
- doc(common): deprecate
ConnectionOptions
member functions (#8907) - doc: make the minimum Bazel and CMake versions easier to find (#8909)
We are introducing 2 new client libraries for 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.
We are happy to announce that the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use.
Expand to see the full list of new GA libraries...
- doc(bigtable): deprecate DataClient member fns (#8813)
- doc(bigtable): deprecate ClientOptions (#8824)
- doc(pubsub): document publish return value (#8703)
- fix(spanner)!: FLOAT64 NaN values are considered equal (#8805)
BREAKING CHANGES
- While the interface and behavior for
storage::Client::WriteObject()
remains stable, its implementation has changed. Normally implementation details are not breaking changes, but any application mocking the storage library necessarily depends on these implementation details. We updated the mocking examples to guide you in changing any tests (#8806).
Other Changes:
- feat(storage): new option to disable decompressive transcoding (#8834)
- fix(storage): disable checksums for transcoded objects (#8830)
- doc: fix typo, change "optional" to "optimal" (#8825)
BREAKING CHANGES
The library has been disabled on macOS due to a protobuf naming clash. See #8785 for details.
We are introducing 3 new client libraries for 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.
BREAKING CHANGES
-
Starting with this release Linux and Windows builds based on CMake no longer set
CMAKE_CXX_STANDARD
to11
. We rely on the compiler's default C++ language standard. Note that all the compilers we support default to C++14.- On macOS the default is C++98, as
google-cloud-cpp
requires C++ >= 11, we continue to setCMAKE_CXX_STANDARD
on that platform. - This only changes the default C++ version, we continue to test and support C++11.
- For more details, see #6767.
- On macOS the default is C++98, as
-
The following deprecated, legacy IAM classes have been removed:
google::cloud::IamPolicy
,google::cloud::IamBinding
,google::cloud::IamBindings
. They were designed before IAM conditions. They did not work with IAM policies that include IAM conditions. See #5929 for more details. -
cleanup!: restrict testing_util build visibility (#8584)
-
cleanup!: change bazel visibility to private for {tests,quickstarts,examples,samples,benchmarks} (#8578)
Other Changes
- fix: treat
kDeadlineExceeded
as permanent error in all services (#8525)
BREAKING CHANGES
InstanceAdmin::GetIamPolicy
andInstanceAdmin::SetIamPolicy
have been retired. If you are affected by this removal, please useInstanceAdmin::GetNativeIamPolicy
andInstanceAdmin::SetNativeIamPolicy
instead. See #5929 for more details.
The library has been expanded to include the following services (#8530):
- fix(pubsub): increase grpc.max_metadata_size limit (#8626)
- feat(spanner): add remaining PostgreSQL samples (#8627)
- feat(spanner): add initial PostgreSQL samples (#8617)
- feat(spanner): integration tests for Database.database_dialect (#8589)
- feat(spanner): integration tests and sample for CopyBackup() (#8574)
- fix(spanner): correct handling of PartialResultSet.resume_token (#8521)
- fix(spanner): capture the ReadRequest by value in the reader factory (#8515)
BREAKING CHANGES
Client::GetBucketIamPolicy
andClient::SetBucketIamPolicy
have been retired. If you are affected by this removal, please useClient::GetNativeBucketIamPolicy
andClient::SetNativeBucketIamPolicy
instead. See #5929 for more details.- cleanup(common)!: remove legacy IAM classes (#8667)
- cleanup(storage)!: remove deprecated IAM functions (#8664)
- cleanup!: change storage bazel visibility to private by default (#8583)
Other Changes
- doc(storage): add custom-dual regions example (#8595) /8664))
- fix(storage):
ParallelUploadFile()
andWithObjectMetadata
(#8629) - fix(storage): return an error on short writes (#8562)
- fix(storage): use correct offset and size types (#8538)
Other Changes
- feat(common):
g::c::future
support for coroutines (#8532)
- The
DisableService()
andEnableService()
RPCs are now retired. These RPCs were deprecated and non-functional at the time this client library was generated. We do not expect this will actually break any existing code. Nevertheless, we apologize for any confusion.
BREAKING CHANGES
- We mistakenly declared GA for this library. Though the current public APIs are stable, the library is incomplete. We are still working on the APIs to publish and receive messages. We apologize for any confusion or inconvenience this caused.
- fix(pubsublite)!: revert GA declaration (#8497)
- fix: no
experimental-
prefix for GA targets (#8496) - fix(container): missing CMake dependency (#8492)
BREAKING CHANGES
- As previously announced, we are removing certain legacy CMake targets and
Bazel rules in this release.
- Bazel Users: applications should use the targets at the top-level
directory, e.g.
//:bigtable
, or//:pubsub
. Targets in each directory (e.g.//google/cloud/bigtable:bigtable_client
) are now retired or marked private. - CMake Users: applications should use the
google-cloud-cpp::*
targets (e.g.google-cloud-cpp::pubsub
).- All exported targets without a
google-cloud-cpp::
prefix are retired. 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
- Any target starting with
- All exported targets without a
- pkg-config users: applications should use the modules starting with
google_cloud_cpp
. All other modules are now retired. - 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. - More details about the rationale for these changes in #5726.
- Bazel Users: applications should use the targets at the top-level
directory, e.g.
The library has been expanded to include the following services:
- BigQuery ML
- BigQuery Connection API
- BigQuery Data Transfer Service
- BigQuery Reservations
- BigQuery Storage Write API
BREAKING CHANGE: The bigtable::AdminClient
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.
BREAKING CHANGE: The bigtable::InstanceAdminClient
class has been marked
as final
. After the changes in v1.36.0, there is no need
or reason to be extending this class.
OTHER CHANGES:
- feat(bigtable): better support for PSC and VPC-SC (#8458)
- fix(bigtable): ReadRows retries from the
last_scanned_row_key
(#8423) - feat(bigtable): support x-goog-user-project (#8324)
- docs(iam): added comments on private_key_data (#8204)
- feat(pubsub): support
AuthorityOption
(#8460) - feat(pubsub): support x-goog-user-project (#8456)
- feat(pubsub): per-call Options for SubscriptionAdminClient (#8414)
- feat(pubsub): per-call options in TopicAdminClient (#8411)
- feat(pubsub): per-call options in SchemaAdminClient (#8406)
- doc(pubsub): add region tag for subscription with filter (#8326)
All the spanner::Client
operations now take optional google::cloud::Options
arguments, replacing the existing ClientOptions
, CommitOptions
,
PartitionOptions
, QueryOptions
, and ReadOptions
arguments, or adding
options to operations that previously had none. Users should migrate to these
new overloads. (Note that the old spanner::*Options
types have not been
deprecated as they are still used in the spanner::Connection
interface.)
OTHER CHANGES:
- feat(spanner): use prevailing Options in ConnectionImpl (#8466)
- feat(spanner): convert ReadOptions/PartitionOptions to Options (#8448)
- fix(spanner): instantiate OptionsSpan objects in legacy admin calls (#8440)
- feat(spanner): convert QueryOptions to Options in main client API (#8430)
- fix(spanner): add Options save/restore to PartialResultSetSource (#8355)
- feat(spanner): support x-goog-user-project (#8316)
- feat(storage): support AuthorityOption (#8462)
- fix(storage): json["projectTeam"] might be present but null (#8446)
- doc(storage): improve
{Bucket,Object}Metadata
docs (#8434) - fix(storage): ignored fields in lifecycle patches (#8389)
- doc(storage): show how to configure endpoints (#8354)
- doc(storage): UserIp option is deprecated (#8468)
- feat(generator): all bidir streams are experimental (#8471)
- feat: better support for PSC and VPC-SC (#8453)
- fix: wait until AutomaticallyCreatedBackgroundThreads start (#8452)
- fix: restore Options over deletion of StreamRange::reader_ (#8403)
- feat(common): converting constructors for future (#8329)
- fix: add Options save/restore to StreamRange and cancellations (#8256)
- feat(generator): support parameters named "options" (#8283)
- feat(generator): support
x-goog-user-project
(#8245) - fix: correct uses of
target_compatible_with
(#8257) - fix(generator): Connection base-class operations should fail (#8236)
We are introducing client libraries for 9 more 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...
We are happy to announce that the following GA libraries. We expect these libraries to have a stable API, to offer the full functionality of the GA version of service they wrap, and are ready for production use.
Expand to see the full list of new GA 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
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)
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.