2121#include " google/cloud/background_threads.h"
2222#include " google/cloud/common_options.h"
2323#include " google/cloud/grpc_options.h"
24+ #include " google/cloud/internal/async_long_running_operation.h"
2425#include " google/cloud/internal/pagination_range.h"
2526#include " google/cloud/internal/retry_loop.h"
2627#include < memory>
@@ -50,6 +51,11 @@ idempotency_policy(Options const& options) {
5051 ->clone ();
5152}
5253
54+ std::unique_ptr<PollingPolicy> polling_policy (Options const & options) {
55+ return options.get <aiplatform_v1::ModelGardenServicePollingPolicyOption>()
56+ ->clone ();
57+ }
58+
5359} // namespace
5460
5561ModelGardenServiceConnectionImpl::ModelGardenServiceConnectionImpl (
@@ -76,6 +82,96 @@ ModelGardenServiceConnectionImpl::GetPublisherModel(
7682 *current, request, __func__);
7783}
7884
85+ future<StatusOr<google::cloud::aiplatform::v1::DeployResponse>>
86+ ModelGardenServiceConnectionImpl::Deploy (
87+ google::cloud::aiplatform::v1::DeployRequest const & request) {
88+ auto current = google::cloud::internal::SaveCurrentOptions ();
89+ auto request_copy = request;
90+ auto const idempotent = idempotency_policy (*current)->Deploy (request_copy);
91+ return google::cloud::internal::AsyncLongRunningOperation<
92+ google::cloud::aiplatform::v1::DeployResponse>(
93+ background_->cq (), current, std::move (request_copy),
94+ [stub = stub_](
95+ google::cloud::CompletionQueue& cq,
96+ std::shared_ptr<grpc::ClientContext> context,
97+ google::cloud::internal::ImmutableOptions options,
98+ google::cloud::aiplatform::v1::DeployRequest const & request) {
99+ return stub->AsyncDeploy (cq, std::move (context), std::move (options),
100+ request);
101+ },
102+ [stub = stub_](google::cloud::CompletionQueue& cq,
103+ std::shared_ptr<grpc::ClientContext> context,
104+ google::cloud::internal::ImmutableOptions options,
105+ google::longrunning::GetOperationRequest const & request) {
106+ return stub->AsyncGetOperation (cq, std::move (context),
107+ std::move (options), request);
108+ },
109+ [stub = stub_](
110+ google::cloud::CompletionQueue& cq,
111+ std::shared_ptr<grpc::ClientContext> context,
112+ google::cloud::internal::ImmutableOptions options,
113+ google::longrunning::CancelOperationRequest const & request) {
114+ return stub->AsyncCancelOperation (cq, std::move (context),
115+ std::move (options), request);
116+ },
117+ &google::cloud::internal::ExtractLongRunningResultResponse<
118+ google::cloud::aiplatform::v1::DeployResponse>,
119+ retry_policy (*current), backoff_policy (*current), idempotent,
120+ polling_policy (*current), __func__);
121+ }
122+
123+ StatusOr<google::longrunning::Operation>
124+ ModelGardenServiceConnectionImpl::Deploy (
125+ NoAwaitTag, google::cloud::aiplatform::v1::DeployRequest const & request) {
126+ auto current = google::cloud::internal::SaveCurrentOptions ();
127+ return google::cloud::internal::RetryLoop (
128+ retry_policy (*current), backoff_policy (*current),
129+ idempotency_policy (*current)->Deploy (request),
130+ [this ](grpc::ClientContext& context, Options const & options,
131+ google::cloud::aiplatform::v1::DeployRequest const & request) {
132+ return stub_->Deploy (context, options, request);
133+ },
134+ *current, request, __func__);
135+ }
136+
137+ future<StatusOr<google::cloud::aiplatform::v1::DeployResponse>>
138+ ModelGardenServiceConnectionImpl::Deploy (
139+ google::longrunning::Operation const & operation) {
140+ auto current = google::cloud::internal::SaveCurrentOptions ();
141+ if (!operation.metadata ()
142+ .Is <typename google::cloud::aiplatform::v1::
143+ DeployOperationMetadata>()) {
144+ return make_ready_future<
145+ StatusOr<google::cloud::aiplatform::v1::DeployResponse>>(
146+ internal::InvalidArgumentError (
147+ " operation does not correspond to Deploy" ,
148+ GCP_ERROR_INFO ().WithMetadata (" operation" ,
149+ operation.metadata ().DebugString ())));
150+ }
151+
152+ return google::cloud::internal::AsyncAwaitLongRunningOperation<
153+ google::cloud::aiplatform::v1::DeployResponse>(
154+ background_->cq (), current, operation,
155+ [stub = stub_](google::cloud::CompletionQueue& cq,
156+ std::shared_ptr<grpc::ClientContext> context,
157+ google::cloud::internal::ImmutableOptions options,
158+ google::longrunning::GetOperationRequest const & request) {
159+ return stub->AsyncGetOperation (cq, std::move (context),
160+ std::move (options), request);
161+ },
162+ [stub = stub_](
163+ google::cloud::CompletionQueue& cq,
164+ std::shared_ptr<grpc::ClientContext> context,
165+ google::cloud::internal::ImmutableOptions options,
166+ google::longrunning::CancelOperationRequest const & request) {
167+ return stub->AsyncCancelOperation (cq, std::move (context),
168+ std::move (options), request);
169+ },
170+ &google::cloud::internal::ExtractLongRunningResultResponse<
171+ google::cloud::aiplatform::v1::DeployResponse>,
172+ polling_policy (*current), __func__);
173+ }
174+
79175StreamRange<google::cloud::location::Location>
80176ModelGardenServiceConnectionImpl::ListLocations (
81177 google::cloud::location::ListLocationsRequest request) {
0 commit comments