Skip to content

Commit f792d07

Browse files
committed
RSCBC-168: Query result metrics is also present even when metrics are not requested
1 parent 418e317 commit f792d07

File tree

6 files changed

+56
-44
lines changed

6 files changed

+56
-44
lines changed

sdk/couchbase-core/src/queryx/query_respreader.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -263,33 +263,31 @@ impl QueryRespReader {
263263
})
264264
}
265265

266-
fn parse_metrics(&self, metrics: Option<QueryMetrics>) -> Metrics {
267-
if let Some(metrics) = metrics {
268-
let elapsed_time = if let Some(elapsed) = metrics.elapsed_time {
266+
fn parse_metrics(&self, metrics: Option<QueryMetrics>) -> Option<Metrics> {
267+
metrics.map(|m| {
268+
let elapsed_time = if let Some(elapsed) = m.elapsed_time {
269269
parse_duration_from_golang_string(&elapsed).unwrap_or_default()
270270
} else {
271271
Duration::default()
272272
};
273273

274-
let execution_time = if let Some(execution) = metrics.execution_time {
274+
let execution_time = if let Some(execution) = m.execution_time {
275275
parse_duration_from_golang_string(&execution).unwrap_or_default()
276276
} else {
277277
Duration::default()
278278
};
279279

280-
return Metrics {
280+
Metrics {
281281
elapsed_time,
282282
execution_time,
283-
result_count: metrics.result_count.unwrap_or_default(),
284-
result_size: metrics.result_size.unwrap_or_default(),
285-
mutation_count: metrics.mutation_count.unwrap_or_default(),
286-
sort_count: metrics.sort_count.unwrap_or_default(),
287-
error_count: metrics.error_count.unwrap_or_default(),
288-
warning_count: metrics.warning_count.unwrap_or_default(),
289-
};
290-
}
291-
292-
Metrics::default()
283+
result_count: m.result_count.unwrap_or_default(),
284+
result_size: m.result_size.unwrap_or_default(),
285+
mutation_count: m.mutation_count.unwrap_or_default(),
286+
sort_count: m.sort_count.unwrap_or_default(),
287+
error_count: m.error_count.unwrap_or_default(),
288+
warning_count: m.warning_count.unwrap_or_default(),
289+
}
290+
})
293291
}
294292

295293
fn parse_warnings(&self, warnings: Vec<QueryWarning>) -> Vec<Warning> {

sdk/couchbase-core/src/queryx/query_result.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ pub struct MetaData {
4848
pub request_id: String,
4949
pub client_context_id: String,
5050
pub status: Status,
51-
pub metrics: Metrics,
51+
pub metrics: Option<Metrics>,
5252
pub signature: Option<Box<RawValue>>,
5353
pub warnings: Vec<Warning>,
5454
pub profile: Option<Box<RawValue>>,
@@ -58,7 +58,7 @@ impl Display for MetaData {
5858
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
5959
write!(
6060
f,
61-
"prepared: {:?}, request_id: {}, client_context_id: {}, status: {}, metrics: {}, signature: {:?}, warnings: {:?}, profile: {:?}",
61+
"prepared: {:?}, request_id: {}, client_context_id: {}, status: {}, metrics: {:?}, signature: {:?}, warnings: {:?}, profile: {:?}",
6262
self.prepared,
6363
self.request_id,
6464
self.client_context_id,

sdk/couchbase-core/tests/query.rs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,19 @@ fn test_query_basic() {
4343
assert!(meta.profile.is_none());
4444
assert!(meta.warnings.is_empty());
4545

46-
assert!(!meta.metrics.elapsed_time.is_zero());
47-
assert!(!meta.metrics.execution_time.is_zero());
48-
assert_eq!(1, meta.metrics.result_count);
49-
assert_ne!(0, meta.metrics.result_size);
50-
assert_eq!(0, meta.metrics.mutation_count);
51-
assert_eq!(0, meta.metrics.sort_count);
52-
assert_eq!(0, meta.metrics.error_count);
53-
assert_eq!(0, meta.metrics.warning_count);
46+
let metrics = meta
47+
.metrics
48+
.as_ref()
49+
.expect("expected metrics to be present");
50+
51+
assert!(!metrics.elapsed_time.is_zero());
52+
assert!(!metrics.execution_time.is_zero());
53+
assert_eq!(1, metrics.result_count);
54+
assert_ne!(0, metrics.result_size);
55+
assert_eq!(0, metrics.mutation_count);
56+
assert_eq!(0, metrics.sort_count);
57+
assert_eq!(0, metrics.error_count);
58+
assert_eq!(0, metrics.warning_count);
5459

5560
assert_eq!(
5661
"{\"$1\":\"boolean\"}",
@@ -87,14 +92,19 @@ fn test_prepared_query_basic() {
8792
assert!(meta.profile.is_none());
8893
assert!(meta.warnings.is_empty());
8994

90-
assert!(!meta.metrics.elapsed_time.is_zero());
91-
assert!(!meta.metrics.execution_time.is_zero());
92-
assert_eq!(1, meta.metrics.result_count);
93-
assert_ne!(0, meta.metrics.result_size);
94-
assert_eq!(0, meta.metrics.mutation_count);
95-
assert_eq!(0, meta.metrics.sort_count);
96-
assert_eq!(0, meta.metrics.error_count);
97-
assert_eq!(0, meta.metrics.warning_count);
95+
let metrics = meta
96+
.metrics
97+
.as_ref()
98+
.expect("expected metrics to be present");
99+
100+
assert!(!metrics.elapsed_time.is_zero());
101+
assert!(!metrics.execution_time.is_zero());
102+
assert_eq!(1, metrics.result_count);
103+
assert_ne!(0, metrics.result_size);
104+
assert_eq!(0, metrics.mutation_count);
105+
assert_eq!(0, metrics.sort_count);
106+
assert_eq!(0, metrics.error_count);
107+
assert_eq!(0, metrics.warning_count);
98108

99109
dbg!(&meta.signature);
100110

sdk/couchbase/src/options/query_options.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ impl TryFrom<QueryOptions> for query::QueryOptions {
245245
.args(opts.positional_parameters)
246246
.client_context_id(opts.client_context_id)
247247
.max_parallelism(opts.max_parallelism)
248-
.metrics(opts.metrics)
248+
.metrics(opts.metrics.unwrap_or_default())
249249
.pipeline_batch(opts.pipeline_batch)
250250
.pipeline_cap(opts.pipeline_cap)
251251
.preserve_expiry(opts.preserve_expiry)

sdk/couchbase/src/results/query_results.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub struct QueryMetaData<'a> {
9292
pub request_id: &'a str,
9393
pub client_context_id: &'a str,
9494
pub status: QueryStatus,
95-
pub metrics: QueryMetrics,
95+
pub metrics: Option<QueryMetrics>,
9696
pub signature: Option<&'a RawValue>,
9797
pub warnings: Vec<QueryWarning>,
9898
pub profile: Option<&'a RawValue>,
@@ -105,7 +105,7 @@ impl<'a> From<&'a queryx::query_result::MetaData> for QueryMetaData<'a> {
105105
request_id: meta.request_id.as_ref(),
106106
client_context_id: meta.client_context_id.as_ref(),
107107
status: meta.status.into(),
108-
metrics: QueryMetrics::from(&meta.metrics),
108+
metrics: meta.metrics.as_ref().map(QueryMetrics::from),
109109
signature: meta.signature.as_deref(),
110110
warnings: meta
111111
.warnings

sdk/couchbase/tests/query.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,18 @@ fn assert_metadata(meta: QueryMetaData) {
262262
assert!(meta.profile.is_none());
263263
assert!(meta.warnings.is_empty());
264264

265-
assert!(!meta.metrics.elapsed_time.is_zero());
266-
assert!(!meta.metrics.execution_time.is_zero());
267-
assert_eq!(1, meta.metrics.result_count);
268-
assert_ne!(0, meta.metrics.result_size);
269-
assert_eq!(0, meta.metrics.mutation_count);
270-
assert_eq!(0, meta.metrics.sort_count);
271-
assert_eq!(0, meta.metrics.error_count);
272-
assert_eq!(0, meta.metrics.warning_count);
265+
let metrics = meta
266+
.metrics
267+
.as_ref()
268+
.expect("expected metrics to be present");
269+
assert!(!metrics.elapsed_time.is_zero());
270+
assert!(!metrics.execution_time.is_zero());
271+
assert_eq!(1, metrics.result_count);
272+
assert_ne!(0, metrics.result_size);
273+
assert_eq!(0, metrics.mutation_count);
274+
assert_eq!(0, metrics.sort_count);
275+
assert_eq!(0, metrics.error_count);
276+
assert_eq!(0, metrics.warning_count);
273277

274278
assert_eq!(
275279
"{\"$1\":\"boolean\"}",

0 commit comments

Comments
 (0)