diff --git a/google/cloud/datamigration/BUILD.bazel b/google/cloud/datamigration/BUILD.bazel index 2e50d98b52e8b..a6426221ed0f2 100644 --- a/google/cloud/datamigration/BUILD.bazel +++ b/google/cloud/datamigration/BUILD.bazel @@ -26,6 +26,7 @@ service_dirs = [ googleapis_deps = [ "@com_google_googleapis//google/cloud/clouddms/logging/v1:logging_cc_grpc", "@com_google_googleapis//google/cloud/clouddms/v1:clouddms_cc_grpc", + "@com_google_googleapis//google/cloud/location:location_cc_grpc", ] cc_gapic_library( diff --git a/google/cloud/datamigration/quickstart/quickstart.cc b/google/cloud/datamigration/quickstart/quickstart.cc index 8f4dae71d95d9..b98f6c2fac321 100644 --- a/google/cloud/datamigration/quickstart/quickstart.cc +++ b/google/cloud/datamigration/quickstart/quickstart.cc @@ -29,11 +29,22 @@ int main(int argc, char* argv[]) try { auto client = datamigration::DataMigrationServiceClient( datamigration::MakeDataMigrationServiceConnection()); + std::cout << "------------------------TEST ListMigrationJobs------------------------" << std::endl; + std::cout << "location.FullName() = " << location.FullName() << std::endl; for (auto mj : client.ListMigrationJobs(location.FullName())) { if (!mj) throw std::move(mj).status(); std::cout << mj->DebugString() << "\n"; } + std::cout << "------------------------TEST ListLocations------------------------" << std::endl; + google::cloud::location::ListLocationsRequest ll_req; + *ll_req.mutable_name() = "projects/" + std::string(argv[1]); + std::cout << "ListLocationsRequest name = " << ll_req.name() << "\n"; + for (auto l : client.ListLocations(ll_req)) { + if (!l) throw std::move(l).status(); + std::cout << l->DebugString() << "\n"; + } + return 0; } catch (google::cloud::Status const& status) { std::cerr << "google::cloud::Status thrown: " << status << "\n"; diff --git a/google/cloud/datamigration/v1/data_migration_client.cc b/google/cloud/datamigration/v1/data_migration_client.cc index 7abc948a2e3b9..d51e779457c50 100644 --- a/google/cloud/datamigration/v1/data_migration_client.cc +++ b/google/cloud/datamigration/v1/data_migration_client.cc @@ -41,6 +41,14 @@ DataMigrationServiceClient::ListMigrationJobs(std::string const& parent, return connection_->ListMigrationJobs(request); } +StreamRange +DataMigrationServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + StreamRange DataMigrationServiceClient::ListMigrationJobs( google::cloud::clouddms::v1::ListMigrationJobsRequest request, diff --git a/google/cloud/datamigration/v1/data_migration_client.h b/google/cloud/datamigration/v1/data_migration_client.h index 189b3e4236a5a..1e00fae3b4759 100644 --- a/google/cloud/datamigration/v1/data_migration_client.h +++ b/google/cloud/datamigration/v1/data_migration_client.h @@ -90,6 +90,10 @@ class DataMigrationServiceClient { } ///@} + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request, + Options opts = {}); + // clang-format off /// /// Lists migration jobs in a given project and location. diff --git a/google/cloud/datamigration/v1/data_migration_connection.cc b/google/cloud/datamigration/v1/data_migration_connection.cc index bef403aa3cea0..b036d39da29b1 100644 --- a/google/cloud/datamigration/v1/data_migration_connection.cc +++ b/google/cloud/datamigration/v1/data_migration_connection.cc @@ -38,6 +38,13 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN DataMigrationServiceConnection::~DataMigrationServiceConnection() = default; +StreamRange +DataMigrationServiceConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + StreamRange DataMigrationServiceConnection::ListMigrationJobs( google::cloud::clouddms::v1:: diff --git a/google/cloud/datamigration/v1/data_migration_connection.h b/google/cloud/datamigration/v1/data_migration_connection.h index 2739b54f2e29b..3e1ec0ccb867d 100644 --- a/google/cloud/datamigration/v1/data_migration_connection.h +++ b/google/cloud/datamigration/v1/data_migration_connection.h @@ -32,6 +32,8 @@ #include "google/cloud/version.h" #include #include +#include + #include namespace google { @@ -191,6 +193,10 @@ class DataMigrationServiceConnection { virtual Options options() { return Options{}; } + virtual StreamRange + ListLocations( + google::cloud::location::ListLocationsRequest request); + virtual StreamRange ListMigrationJobs( google::cloud::clouddms::v1::ListMigrationJobsRequest request); diff --git a/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.cc b/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.cc index 237529d1dda8a..520802916580e 100644 --- a/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.cc +++ b/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.cc @@ -35,6 +35,11 @@ DataMigrationServiceConnectionIdempotencyPolicy::clone() const { *this); } +Idempotency DataMigrationServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + Idempotency DataMigrationServiceConnectionIdempotencyPolicy::ListMigrationJobs( google::cloud::clouddms::v1::ListMigrationJobsRequest) { // NOLINT return Idempotency::kIdempotent; diff --git a/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.h b/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.h index 9460da30f8e13..a95b16da7246f 100644 --- a/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.h +++ b/google/cloud/datamigration/v1/data_migration_connection_idempotency_policy.h @@ -22,6 +22,7 @@ #include "google/cloud/idempotency.h" #include "google/cloud/version.h" #include +#include #include namespace google { @@ -37,6 +38,9 @@ class DataMigrationServiceConnectionIdempotencyPolicy { virtual std::unique_ptr clone() const; + virtual google::cloud::Idempotency ListLocations( + google::cloud::location::ListLocationsRequest request); + virtual google::cloud::Idempotency ListMigrationJobs( google::cloud::clouddms::v1::ListMigrationJobsRequest request); diff --git a/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.cc b/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.cc index 16c53499dfca3..acc199d65baaa 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.cc @@ -31,6 +31,16 @@ DataMigrationServiceAuth::DataMigrationServiceAuth( std::shared_ptr child) : auth_(std::move(auth)), child_(std::move(child)) {} +StatusOr +DataMigrationServiceAuth::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + google::cloud::location::ListLocationsResponse response; + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListLocations(context, options, request); +} + StatusOr DataMigrationServiceAuth::ListMigrationJobs( grpc::ClientContext& context, Options const& options, diff --git a/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.h b/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.h index af726a20955f6..5c80d6a798a21 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.h +++ b/google/cloud/datamigration/v1/internal/data_migration_auth_decorator.h @@ -39,6 +39,10 @@ class DataMigrationServiceAuth : public DataMigrationServiceStub { std::shared_ptr auth, std::shared_ptr child); + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + StatusOr ListMigrationJobs(grpc::ClientContext& context, Options const& options, google::cloud::clouddms::v1::ListMigrationJobsRequest const& diff --git a/google/cloud/datamigration/v1/internal/data_migration_connection_impl.cc b/google/cloud/datamigration/v1/internal/data_migration_connection_impl.cc index 65839e58ef177..78680b51cc9f9 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_connection_impl.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_connection_impl.cc @@ -71,6 +71,41 @@ DataMigrationServiceConnectionImpl::DataMigrationServiceConnectionImpl( options_(internal::MergeOptions( std::move(options), DataMigrationServiceConnection::options())) {} +StreamRange +DataMigrationServiceConnectionImpl::ListLocations( + google::cloud::location::ListLocationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListLocations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = + std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::location::ListLocationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& + request) { + return stub->ListLocations(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::location::ListLocationsResponse r) { + std::vector result( + r.locations().size()); + auto& messages = *r.mutable_locations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + StreamRange DataMigrationServiceConnectionImpl::ListMigrationJobs( google::cloud::clouddms::v1::ListMigrationJobsRequest request) { diff --git a/google/cloud/datamigration/v1/internal/data_migration_connection_impl.h b/google/cloud/datamigration/v1/internal/data_migration_connection_impl.h index 7ece5cafa9455..05a9c42207470 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_connection_impl.h +++ b/google/cloud/datamigration/v1/internal/data_migration_connection_impl.h @@ -52,6 +52,9 @@ class DataMigrationServiceConnectionImpl Options options() override { return options_; } + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + StreamRange ListMigrationJobs( google::cloud::clouddms::v1::ListMigrationJobsRequest request) override; diff --git a/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.cc b/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.cc index 6635cde73fa52..c613b9841f7d7 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.cc @@ -35,6 +35,18 @@ DataMigrationServiceLogging::DataMigrationServiceLogging( TracingOptions tracing_options, std::set const&) : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} +StatusOr +DataMigrationServiceLogging::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return child_->ListLocations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + StatusOr DataMigrationServiceLogging::ListMigrationJobs( grpc::ClientContext& context, Options const& options, diff --git a/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.h b/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.h index 8137deb98d43b..0bb87e371eec8 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.h +++ b/google/cloud/datamigration/v1/internal/data_migration_logging_decorator.h @@ -39,6 +39,10 @@ class DataMigrationServiceLogging : public DataMigrationServiceStub { TracingOptions tracing_options, std::set const& components); + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + StatusOr ListMigrationJobs(grpc::ClientContext& context, Options const& options, google::cloud::clouddms::v1::ListMigrationJobsRequest const& diff --git a/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.cc b/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.cc index cf60dd518a133..25aa2dc60dbc2 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.cc @@ -44,6 +44,14 @@ DataMigrationServiceMetadata::DataMigrationServiceMetadata( ? google::cloud::internal::GeneratedLibClientHeader() : std::move(api_client_header)) {} +StatusOr +DataMigrationServiceMetadata::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + SetMetadata(context, options); + return child_->ListLocations(context, options, request); +} + StatusOr DataMigrationServiceMetadata::ListMigrationJobs( grpc::ClientContext& context, Options const& options, diff --git a/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.h b/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.h index cb48d1d963bd7..d59f08bf3f7dd 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.h +++ b/google/cloud/datamigration/v1/internal/data_migration_metadata_decorator.h @@ -40,6 +40,10 @@ class DataMigrationServiceMetadata : public DataMigrationServiceStub { std::multimap fixed_metadata, std::string api_client_header = ""); + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + StatusOr ListMigrationJobs(grpc::ClientContext& context, Options const& options, google::cloud::clouddms::v1::ListMigrationJobsRequest const& diff --git a/google/cloud/datamigration/v1/internal/data_migration_stub.cc b/google/cloud/datamigration/v1/internal/data_migration_stub.cc index e050dbd5f3b50..768d170df8191 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_stub.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_stub.cc @@ -21,6 +21,7 @@ #include "google/cloud/status_or.h" #include #include +#include #include #include @@ -31,6 +32,18 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN DataMigrationServiceStub::~DataMigrationServiceStub() = default; +StatusOr +DefaultDataMigrationServiceStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + google::cloud::location::ListLocationsResponse response; + auto status = locations_stub_->ListLocations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + StatusOr DefaultDataMigrationServiceStub::ListMigrationJobs( grpc::ClientContext& context, Options const&, diff --git a/google/cloud/datamigration/v1/internal/data_migration_stub.h b/google/cloud/datamigration/v1/internal/data_migration_stub.h index ac88f9f3cced8..b7a98b8e47355 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_stub.h +++ b/google/cloud/datamigration/v1/internal/data_migration_stub.h @@ -26,6 +26,7 @@ #include "google/cloud/version.h" #include #include +#include #include #include @@ -38,6 +39,10 @@ class DataMigrationServiceStub { public: virtual ~DataMigrationServiceStub() = 0; + virtual StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) = 0; + virtual StatusOr ListMigrationJobs( grpc::ClientContext& context, Options const& options, @@ -450,9 +455,16 @@ class DefaultDataMigrationServiceStub : public DataMigrationServiceStub { std::unique_ptr< google::cloud::clouddms::v1::DataMigrationService::StubInterface> grpc_stub, + std::unique_ptr + location_stub, std::unique_ptr operations) - : grpc_stub_(std::move(grpc_stub)), operations_(std::move(operations)) {} + : grpc_stub_(std::move(grpc_stub)), locations_stub_(std::move(location_stub)), + operations_(std::move(operations)) {} + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; StatusOr ListMigrationJobs(grpc::ClientContext& context, Options const& options, @@ -851,6 +863,9 @@ class DefaultDataMigrationServiceStub : public DataMigrationServiceStub { std::unique_ptr< google::cloud::clouddms::v1::DataMigrationService::StubInterface> grpc_stub_; + std::unique_ptr< + google::cloud::location::Locations::StubInterface> + locations_stub_; std::unique_ptr operations_; }; diff --git a/google/cloud/datamigration/v1/internal/data_migration_stub_factory.cc b/google/cloud/datamigration/v1/internal/data_migration_stub_factory.cc index bb3630665cb4f..9219c409efecf 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_stub_factory.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_stub_factory.cc @@ -29,6 +29,7 @@ #include "google/cloud/log.h" #include "google/cloud/options.h" #include +#include #include #include @@ -44,9 +45,11 @@ std::shared_ptr CreateDefaultDataMigrationServiceStub( internal::MakeChannelArguments(options)); auto service_grpc_stub = google::cloud::clouddms::v1::DataMigrationService::NewStub(channel); + auto service_location_stub = google::cloud::location::Locations::NewStub(channel); std::shared_ptr stub = std::make_shared( std::move(service_grpc_stub), + std::move(service_location_stub), google::longrunning::Operations::NewStub(channel)); if (auth->RequiresConfigureContext()) { diff --git a/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.cc b/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.cc index 695e627426760..36fe5f911a36c 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.cc +++ b/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.cc @@ -32,6 +32,18 @@ DataMigrationServiceTracingStub::DataMigrationServiceTracingStub( std::shared_ptr child) : child_(std::move(child)), propagator_(internal::MakePropagator()) {} +StatusOr +DataMigrationServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.location.Locations", "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->ListLocations(context, options, request)); +} + StatusOr DataMigrationServiceTracingStub::ListMigrationJobs( grpc::ClientContext& context, Options const& options, diff --git a/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.h b/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.h index 642a4cc90c43e..1a24a7916930e 100644 --- a/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.h +++ b/google/cloud/datamigration/v1/internal/data_migration_tracing_stub.h @@ -39,6 +39,10 @@ class DataMigrationServiceTracingStub : public DataMigrationServiceStub { explicit DataMigrationServiceTracingStub( std::shared_ptr child); + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + StatusOr ListMigrationJobs(grpc::ClientContext& context, Options const& options, google::cloud::clouddms::v1::ListMigrationJobsRequest const&