Skip to content

Commit e515b27

Browse files
author
Devdutt Shenoi
committed
refactor: simplify query response flow
1 parent 4d4a979 commit e515b27

File tree

2 files changed

+11
-18
lines changed

2 files changed

+11
-18
lines changed

src/handlers/http/query.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use std::collections::HashMap;
3232
use std::pin::Pin;
3333
use std::sync::Arc;
3434
use std::time::Instant;
35-
use tracing::error;
35+
use tracing::{debug, error};
3636

3737
use crate::event::error::EventError;
3838
use crate::handlers::http::fetch_schema;
@@ -104,7 +104,7 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
104104

105105
user_auth_for_query(&permissions, &tables)?;
106106

107-
let time = Instant::now();
107+
let start = Instant::now();
108108
// Intercept `count(*)`` queries and use the counts API
109109
if let Some(column_name) = query.is_logical_plan_count_without_filters() {
110110
let counts_req = CountsRequest {
@@ -125,12 +125,13 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
125125
Value::Array(vec![json!({column_name: count})])
126126
};
127127

128-
let time = time.elapsed().as_secs_f64();
129-
128+
let time = start.elapsed().as_secs_f64();
130129
QUERY_EXECUTE_TIME
131130
.with_label_values(&[&table_name])
132131
.observe(time);
133132

133+
debug!("Query results returned in {time}s");
134+
134135
return Ok(HttpResponse::Ok().json(response));
135136
}
136137
let (records, fields) = query.execute(table_name.clone()).await?;
@@ -141,15 +142,16 @@ pub async fn query(req: HttpRequest, query_request: Query) -> Result<HttpRespons
141142
fill_null: query_request.send_null,
142143
with_fields: query_request.fields,
143144
}
144-
.to_http()?;
145-
146-
let time = time.elapsed().as_secs_f64();
145+
.to_json()?;
147146

147+
let time = start.elapsed().as_secs_f64();
148148
QUERY_EXECUTE_TIME
149149
.with_label_values(&[&table_name])
150150
.observe(time);
151151

152-
Ok(response)
152+
debug!("Query results returned in {time}s");
153+
154+
Ok(HttpResponse::Ok().json(response))
153155
}
154156

155157
pub async fn get_counts(

src/response.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
*/
1818

1919
use crate::handlers::http::query::QueryError;
20-
use actix_web::HttpResponse;
2120
use datafusion::arrow::record_batch::RecordBatch;
2221
use serde_json::{json, Map, Value};
23-
use tracing::info;
2422

2523
pub struct QueryResponse {
2624
pub records: Vec<RecordBatch>,
@@ -31,14 +29,7 @@ pub struct QueryResponse {
3129

3230
impl QueryResponse {
3331
/// TODO: maybe this can be futher optimized by directly converting `arrow` to `serde_json` instead of serializing to bytes
34-
pub fn to_http(&self) -> Result<HttpResponse, QueryError> {
35-
info!("Returning query results");
36-
let response = self.to_json()?;
37-
38-
Ok(HttpResponse::Ok().json(response))
39-
}
40-
41-
fn to_json(&self) -> Result<Value, QueryError> {
32+
pub fn to_json(&self) -> Result<Value, QueryError> {
4233
let buf = vec![];
4334
let mut writer = arrow_json::ArrayWriter::new(buf);
4435
let records: Vec<&RecordBatch> = self.records.iter().collect();

0 commit comments

Comments
 (0)