Skip to content

Commit 002ea76

Browse files
impl(bq_driver): Add Log macros in bq_client_interface dir (#1169)
1 parent 267c68d commit 002ea76

8 files changed

Lines changed: 209 additions & 22 deletions

File tree

google/cloud/odbc/bq_client_interface/datasets.cc

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "google/cloud/odbc/bq_client_interface/datasets.h"
1616
#include "google/cloud/odbc/internal/status_record_or.h"
1717
#include "google/cloud/bigquery/v2/minimal/internal/dataset_client.h"
18+
#include <absl/log/log.h>
1819

1920
namespace google::cloud::odbc_bigquery_client_interface {
2021

@@ -27,59 +28,82 @@ using ::google::cloud::bigquery_v2_minimal_internal::ListFormatDataset;
2728
using google::cloud::odbc_internal::StatusRecord;
2829
using google::cloud::odbc_internal::StatusRecordOr;
2930

31+
#pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
32+
apply_to = function)
3033
StatusRecordOr<Dataset> GetDataset(DatasetClient& dataset_client,
3134
std::string const& project_id,
3235
std::string const& dataset_id,
3336
Options const& options) {
3437
GetDatasetRequest request;
3538
request.set_project_id(project_id);
3639
request.set_dataset_id(dataset_id);
40+
LOG(INFO) << "GetDataSet:: Request body: " << request.DebugString("");
3741

38-
return StatusRecordOr<Dataset>::ConvertFromStatusOr(
39-
dataset_client.GetDataset(request, options));
42+
auto response = dataset_client.GetDataset(request, options);
43+
if (!response.ok()) {
44+
LOG(WARNING) << "GetDataSet:: Request failed: " << response.status();
45+
return StatusRecordOr<Dataset>::ConvertFromStatusOr(response.status());
46+
}
47+
LOG(INFO) << "GetDataSet:: Response body: "
48+
<< GetJsonRegResp<Dataset>(*response);
49+
return StatusRecordOr<Dataset>::ConvertFromStatusOr(*response);
4050
}
51+
#pragma clang attribute pop
4152

53+
#pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
54+
apply_to = function)
4255
StatusRecordOr<std::vector<ListFormatDataset>> ListAllDatasets(
4356
DatasetClient& dataset_client, std::string const& project_id,
4457
Options const& options) {
4558
ListDatasetsRequest request;
4659
request.set_project_id(project_id);
4760
request.set_all_datasets(true);
48-
61+
LOG(INFO) << "ListAllDatasets:: Request body: " << request.DebugString("");
4962
StreamRange<ListFormatDataset> datasets_response =
5063
dataset_client.ListDatasets(request, options);
5164

5265
std::vector<ListFormatDataset> datasets;
5366
for (auto const& dataset : datasets_response) {
5467
if (!dataset) {
68+
LOG(ERROR) << "ListAllDatasets:: " << dataset.status().message();
5569
return StatusRecord::ConvertFrom(dataset.status());
5670
}
71+
LOG(INFO) << "ListAllDatasets:: Response body: "
72+
<< GetJsonRegResp<ListFormatDataset>(*dataset);
5773
datasets.push_back(*dataset);
5874
}
5975

6076
return datasets;
6177
}
78+
#pragma clang attribute pop
6279

80+
#pragma clang attribute push(__attribute__((no_sanitize("memory"))), \
81+
apply_to = function)
6382
StatusRecordOr<std::vector<ListFormatDataset>> FilterDatasets(
6483
DatasetClient& dataset_client, std::string const& project_id,
6584
DatasetFilter const& dataset_filter, Options const& options) {
6685
ListDatasetsRequest request;
6786
request.set_project_id(project_id);
6887
request.set_all_datasets(dataset_filter.all);
6988
request.set_filter(dataset_filter.filter);
89+
LOG(INFO) << "FilterDatasets:: Request body: " << request.DebugString("");
7090

7191
StreamRange<ListFormatDataset> datasets_response =
7292
dataset_client.ListDatasets(request, options);
7393

7494
std::vector<ListFormatDataset> datasets;
7595
for (auto const& dataset : datasets_response) {
7696
if (!dataset) {
97+
LOG(ERROR) << "FilterDatasets:: " << dataset.status().message();
7798
return StatusRecord::ConvertFrom(dataset.status());
7899
}
100+
LOG(INFO) << "FilterDatasets:: Response body: "
101+
<< GetJsonRegResp<ListFormatDataset>(*dataset);
79102
datasets.push_back(*dataset);
80103
}
81104

82105
return datasets;
83106
}
107+
#pragma clang attribute pop
84108

85109
} // namespace google::cloud::odbc_bigquery_client_interface

google/cloud/odbc/bq_client_interface/datasets.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ struct DatasetFilter {
2929
bool all = false;
3030
};
3131

32+
template <typename T>
33+
inline std::string GetJsonRegResp(T const& req_or_resp) {
34+
nlohmann::json json_obj;
35+
to_json(json_obj, req_or_resp);
36+
return json_obj.dump(4);
37+
}
38+
3239
// Returns detailed info for a specific Dataset.
3340
odbc_internal::StatusRecordOr<
3441
::google::cloud::bigquery_v2_minimal_internal::Dataset>

google/cloud/odbc/bq_client_interface/jobs.cc

Lines changed: 96 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
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

2123
namespace 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)
109113
StatusRecordOr<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)
122135
StatusRecordOr<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)
156177
StatusRecordOr<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)
179207
StatusRecordOr<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)
205240
StatusRecordOr<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)
217261
StatusRecordOr<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)
236288
StatusRecordOr<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

249310
StatusRecordOr<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)
256319
StatusRecordOr<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)
313384
StatusRecordOr<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

Comments
 (0)