1313// limitations under the License.
1414
1515#include " google/cloud/odbc/bq_client_interface/jobs.h"
16+ #include " google/cloud/odbc/bq_client_interface/datasets.h"
1617#include " google/cloud/odbc/internal/status_record_or.h"
1718#include " google/cloud/bigquery/v2/minimal/internal/job_client.h"
1819#include " google/cloud/bigquery/v2/minimal/internal/job_request.h"
20+ #include < absl/log/log.h>
1921#include < thread>
2022
2123namespace google ::cloud::odbc_bigquery_client_interface {
@@ -106,6 +108,8 @@ std::vector<std::string> CreateKeysToFilterOut(
106108 return default_filtered_keys;
107109}
108110
111+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
112+ apply_to = function)
109113StatusRecordOr<Job> GetJob (JobClient& job_client, std::string const & project_id,
110114 std::string const & job_id,
111115 std::string const & location,
@@ -114,20 +118,31 @@ StatusRecordOr<Job> GetJob(JobClient& job_client, std::string const& project_id,
114118 get_job_request.set_project_id (project_id);
115119 get_job_request.set_job_id (job_id);
116120 get_job_request.set_location (location);
121+ LOG (INFO ) << " GetJob:: Request body: " << get_job_request.DebugString (" " );
117122
118- return StatusRecordOr<Job>::ConvertFromStatusOr (
119- job_client.GetJob (get_job_request, options));
123+ auto response = job_client.GetJob (get_job_request, options);
124+ if (!response.ok ()) {
125+ LOG (WARNING ) << " GetJob:: Request failed: " << response.status ();
126+ return StatusRecordOr<Job>::ConvertFromStatusOr (response.status ());
127+ }
128+ LOG (INFO ) << " GetJob:: Response body: " << GetJsonRegResp<Job>(*response);
129+ return StatusRecordOr<Job>::ConvertFromStatusOr (*response);
120130}
131+ #pragma clang attribute pop
121132
133+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
134+ apply_to = function)
122135StatusRecordOr<std::vector<ListFormatJob>> ListAllJobs (
123136 JobClient& job_client, std::string const & project_id,
124137 std::string const & parent_job_id, Options const & options) {
125138 // Validate inputs
126139 if (project_id.empty ()) {
140+ LOG (ERROR ) << " ListAllJobs:: project_id cannot be empty" ;
127141 return StatusRecord::ConvertFrom (
128142 Status (StatusCode::kInvalidArgument , " project_id cannot be empty" ));
129143 }
130144 if (parent_job_id.empty ()) {
145+ LOG (ERROR ) << " ListAllJobs:: parent_job_id cannot be empty" ;
131146 return StatusRecord::ConvertFrom (
132147 Status (StatusCode::kInvalidArgument , " parent_job_id cannot be empty" ));
133148 }
@@ -138,21 +153,27 @@ StatusRecordOr<std::vector<ListFormatJob>> ListAllJobs(
138153 request.set_all_users (false );
139154 request.set_max_results (kMaxChildJobsResults );
140155 request.set_projection (Projection::Full ());
141-
156+ LOG ( INFO ) << " ListAllJobs:: Request body: " << request. DebugString ( " " );
142157 StreamRange<ListFormatJob> jobs_response =
143158 job_client.ListJobs (request, options);
144159
145160 std::vector<ListFormatJob> jobs;
146161 for (auto const & job : jobs_response) {
147162 if (!job) {
163+ LOG (ERROR ) << " ListAllJobs:: " << job.status ().message ();
148164 return StatusRecord::ConvertFrom (job.status ());
149165 }
166+ LOG (INFO ) << " ListAllJobs:: Response body: "
167+ << GetJsonRegResp<ListFormatJob>(*job);
150168 jobs.push_back (*job);
151169 }
152170
153171 return jobs;
154172}
173+ #pragma clang attribute pop
155174
175+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
176+ apply_to = function)
156177StatusRecordOr<std::vector<ListFormatJob>> ListAllJobs (
157178 JobClient& job_client, std::string const & project_id,
158179 Options const & options) {
@@ -161,21 +182,28 @@ StatusRecordOr<std::vector<ListFormatJob>> ListAllJobs(
161182 request.set_all_users (false );
162183 request.set_max_results (kMaxChildJobsResults );
163184 request.set_projection (Projection::Full ());
185+ LOG (INFO ) << " ListAllJobs:: Request body: " << request.DebugString (" " );
164186
165187 StreamRange<ListFormatJob> jobs_response =
166188 job_client.ListJobs (request, options);
167189
168190 std::vector<ListFormatJob> jobs;
169191 for (auto const & job : jobs_response) {
170192 if (!job) {
193+ LOG (ERROR ) << " ListAllJobs:: " << job.status ().message ();
171194 return StatusRecord::ConvertFrom (job.status ());
172195 }
196+ LOG (INFO ) << " ListAllJobs:: Response body: "
197+ << GetJsonRegResp<ListFormatJob>(*job);
173198 jobs.push_back (*job);
174199 }
175200
176201 return jobs;
177202}
203+ #pragma clang attribute pop
178204
205+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
206+ apply_to = function)
179207StatusRecordOr<std::vector<ListFormatJob>> FilterJobs (
180208 JobClient& job_client, std::string const & project_id,
181209 JobFilter const & job_filter, Options const & options) {
@@ -188,20 +216,27 @@ StatusRecordOr<std::vector<ListFormatJob>> FilterJobs(
188216 request.set_parent_job_id (job_filter.parent_job_id );
189217 request.set_projection (job_filter.projection );
190218
219+ LOG (INFO ) << " FilterJobs:: Request body: " << request.DebugString (" " );
191220 StreamRange<ListFormatJob> jobs_response =
192221 job_client.ListJobs (request, options);
193222
194223 std::vector<ListFormatJob> jobs;
195224 for (auto const & job : jobs_response) {
196225 if (!job) {
226+ LOG (ERROR ) << " FilterJobs:: " << job.status ().message ();
197227 return StatusRecord::ConvertFrom (job.status ());
198228 }
229+ LOG (INFO ) << " FilterJobs:: Response body: "
230+ << GetJsonRegResp<ListFormatJob>(*job);
199231 jobs.push_back (*job);
200232 }
201233
202234 return jobs;
203235}
236+ #pragma clang attribute pop
204237
238+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
239+ apply_to = function)
205240StatusRecordOr<Job> InsertJob (JobClient& job_client,
206241 std::string const & project_id, Job const & job,
207242 Options const & options) {
@@ -210,10 +245,19 @@ StatusRecordOr<Job> InsertJob(JobClient& job_client,
210245 request.set_job (job);
211246 request.set_json_filter_keys (CreateKeysToFilterOut (job));
212247
213- return StatusRecordOr<Job>::ConvertFromStatusOr (
214- job_client.InsertJob (request, options));
248+ LOG (INFO ) << " InsertJob:: Request body: " << request.DebugString (" " );
249+ auto response = job_client.InsertJob (request, options);
250+ if (!response.ok ()) {
251+ LOG (WARNING ) << " InsertJob:: Request failed: " << response.status ();
252+ return StatusRecordOr<Job>::ConvertFromStatusOr (response.status ());
253+ }
254+ LOG (INFO ) << " InsertJob: Response body: " << GetJsonRegResp<Job>(*response);
255+ return StatusRecordOr<Job>::ConvertFromStatusOr (*response);
215256}
257+ #pragma clang attribute pop
216258
259+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
260+ apply_to = function)
217261StatusRecordOr<Job> CancelJob (JobClient& job_client,
218262 std::string const & project_id,
219263 std::string const & job_id,
@@ -228,11 +272,19 @@ StatusRecordOr<Job> CancelJob(JobClient& job_client,
228272 if (!location.empty ()) {
229273 request.set_location (location);
230274 }
231-
232- return StatusRecordOr<Job>::ConvertFromStatusOr (
233- job_client.CancelJob (request, options));
275+ LOG (INFO ) << " CancelJob:: Request body: " << request.DebugString (" " );
276+ auto response = job_client.CancelJob (request, options);
277+ if (!response.ok ()) {
278+ LOG (WARNING ) << " CancelJob:: Request failed: " << response.status ();
279+ return StatusRecordOr<Job>::ConvertFromStatusOr (response.status ());
280+ }
281+ LOG (INFO ) << " CancelJob:: Response body: " << GetJsonRegResp<Job>(*response);
282+ return StatusRecordOr<Job>::ConvertFromStatusOr (*response);
234283}
284+ #pragma clang attribute pop
235285
286+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
287+ apply_to = function)
236288StatusRecordOr<PostQueryResults> Query (JobClient& job_client,
237289 std::string const & project_id,
238290 QueryRequest const & query_request,
@@ -242,9 +294,18 @@ StatusRecordOr<PostQueryResults> Query(JobClient& job_client,
242294 post_query_request.set_query_request (query_request);
243295 post_query_request.set_json_filter_keys (CreateKeysToFilterOut (query_request));
244296
245- return StatusRecordOr<PostQueryResults>::ConvertFromStatusOr (
246- job_client.Query (post_query_request, options));
297+ LOG (INFO ) << " Query:: Request body: " << post_query_request.DebugString (" " );
298+ auto response = job_client.Query (post_query_request, options);
299+ if (!response.ok ()) {
300+ LOG (WARNING ) << " Query:: Request failed: " << response.status ();
301+ return StatusRecordOr<PostQueryResults>::ConvertFromStatusOr (
302+ response.status ());
303+ }
304+ LOG (INFO ) << " Query:: Response body: "
305+ << GetJsonRegResp<PostQueryResults>(*response);
306+ return StatusRecordOr<PostQueryResults>::ConvertFromStatusOr (*response);
247307}
308+ #pragma clang attribute pop
248309
249310StatusRecordOr<PostQueryResults> PostQuery (
250311 JobClient& job_client, PostQueryRequest const & post_query_request,
@@ -253,6 +314,8 @@ StatusRecordOr<PostQueryResults> PostQuery(
253314 post_query_request.query_request (), options);
254315}
255316
317+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
318+ apply_to = function)
256319StatusRecordOr<GetQueryResults> GetAllQueryResults (
257320 JobClient& job_client, std::string const & project_id,
258321 std::string const & job_id, std::string const & location,
@@ -273,16 +336,20 @@ StatusRecordOr<GetQueryResults> GetAllQueryResults(
273336 std::string message = " The query timeout period of " +
274337 std::to_string (timeout_ms.count ()) +
275338 " ms has expired" ;
339+ LOG (ERROR ) << " GetAllQueryResults:: " << message;
276340 return StatusRecord{SQLStates::k_HYT00 (), message};
277341 }
278342 std::this_thread::sleep_for (chrono_ms (200 ));
279343 StatusOr<GetQueryResults> get_query_results_partial =
280344 job_client.QueryResults (get_query_results_request, options);
281345
282346 if (!get_query_results_partial) {
347+ LOG (ERROR ) << " GetAllQueryResults::QueryResults:: "
348+ << get_query_results_partial.status ().message ();
283349 return StatusRecord::ConvertFrom (get_query_results_partial.status ());
284350 }
285-
351+ LOG (INFO ) << " GetAllQueryResults::QueryResults:: Response body: "
352+ << get_query_results_partial->DebugString (" " );
286353 // If job_complete is false, there would be no rows and we should wait for
287354 // job completion
288355 if (!get_query_results_partial->job_complete &&
@@ -306,10 +373,14 @@ StatusRecordOr<GetQueryResults> GetAllQueryResults(
306373 get_query_results_request.set_page_token (
307374 get_query_results_partial->page_token );
308375 }
309-
376+ LOG (INFO ) << " GetAllQueryResults:: Request body: "
377+ << get_query_results_request.DebugString (" " );
310378 return get_query_results;
311379}
380+ #pragma clang attribute pop
312381
382+ #pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
383+ apply_to = function)
313384StatusRecordOr<GetQueryResults> FilterQueryResults (
314385 JobClient& job_client, std::string const & project_id,
315386 std::string const & job_id, std::string const & location,
@@ -325,8 +396,19 @@ StatusRecordOr<GetQueryResults> FilterQueryResults(
325396 get_query_results_request.set_max_results (query_results_filter.max_results );
326397 get_query_results_request.set_page_token (query_results_filter.page_token );
327398
328- return StatusRecordOr<GetQueryResults>::ConvertFromStatusOr (
329- job_client.QueryResults (get_query_results_request, options));
399+ LOG (INFO ) << " FilterQueryResults:: Request body: "
400+ << get_query_results_request.DebugString (" " );
401+ auto response = job_client.QueryResults (get_query_results_request, options);
402+ if (!response.ok ()) {
403+ LOG (WARNING ) << " FilterQueryResults:: Request failed: "
404+ << response.status ();
405+ return StatusRecordOr<GetQueryResults>::ConvertFromStatusOr (
406+ response.status ());
407+ }
408+ LOG (INFO ) << " FilterQueryResults::QueryResults:: Response body: "
409+ << response->DebugString (" " );
410+ return StatusRecordOr<GetQueryResults>::ConvertFromStatusOr (*response);
330411}
412+ #pragma clang attribute pop
331413
332414} // namespace google::cloud::odbc_bigquery_client_interface
0 commit comments