Skip to content

Commit 7f76b61

Browse files
committed
box warp routes
box warp routes to avoid super heavy types. Performance impact should be okay, since these heavy types are not cache friendly. This reduces type complexity significantly, but some really long type chains remain. I've identified two, but they may be more 1. Boxed or chains 2. Response type chains We can replace the boxed or chains with a Vec, since they all contain the same box type now. Such a type doesn't seem to exist in warp yet. `cargo install --path .` Compile time before 4m49s Compile time now 4m14s Tool to list heavy functions: ` CARGO_PROFILE_RELEASE_LTO=fat cargo llvm-lines --release --bin quickwit > llvm_lines ` Size down from 32MB to 22MB addresses #5539
1 parent ee362fc commit 7f76b61

File tree

16 files changed

+73
-24
lines changed

16 files changed

+73
-24
lines changed

quickwit/quickwit-serve/src/cluster_api/rest_handler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ pub fn cluster_handler(
4545
.and(extract_format_from_qs())
4646
.map(into_rest_api_response)
4747
.recover(recover_fn)
48+
.boxed()
4849
}
4950

5051
#[utoipa::path(

quickwit/quickwit-serve/src/delete_task_api/handler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ pub fn delete_task_api_handlers(
6565
get_delete_tasks_handler(metastore.clone())
6666
.or(post_delete_tasks_handler(metastore.clone()))
6767
.recover(recover_fn)
68+
.boxed()
6869
}
6970

7071
pub fn get_delete_tasks_handler(

quickwit/quickwit-serve/src/developer_api/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pub(crate) fn developer_api_routes(
4646
warp::path!("api" / "developer" / ..)
4747
.and(
4848
debug_handler(cluster.clone())
49-
.or(log_level_handler(env_filter_reload_fn.clone()))
49+
.or(log_level_handler(env_filter_reload_fn.clone()).boxed())
5050
.or(pprof_handlers()),
5151
)
5252
.recover(recover_fn)

quickwit/quickwit-serve/src/elasticsearch_api/bulk.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ pub fn es_compat_index_bulk_handler(
7676
.and(extract_format_from_qs())
7777
.map(make_elastic_api_response)
7878
.recover(recover_fn)
79+
.boxed()
7980
}
8081

8182
async fn elastic_ingest_bulk(

quickwit/quickwit-serve/src/elasticsearch_api/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ pub fn elastic_api_handlers(
6767
ingest_service.clone(),
6868
ingest_router.clone(),
6969
))
70+
.boxed()
7071
.or(es_compat_index_bulk_handler(ingest_service, ingest_router))
7172
.or(es_compat_index_search_handler(search_service.clone()))
7273
.or(es_compat_index_count_handler(search_service.clone()))
@@ -75,13 +76,15 @@ pub fn elastic_api_handlers(
7576
.or(es_compat_index_field_capabilities_handler(
7677
search_service.clone(),
7778
))
79+
.boxed()
7880
.or(es_compat_index_stats_handler(metastore.clone()))
7981
.or(es_compat_delete_index_handler(index_service))
8082
.or(es_compat_stats_handler(metastore.clone()))
8183
.or(es_compat_index_cat_indices_handler(metastore.clone()))
8284
.or(es_compat_cat_indices_handler(metastore.clone()))
8385
.or(es_compat_resolve_index_handler(metastore.clone()))
8486
.recover(recover_fn)
87+
.boxed()
8588
// Register newly created handlers here.
8689
}
8790

quickwit/quickwit-serve/src/elasticsearch_api/rest_handler.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ pub fn es_compat_cluster_info_handler(
9090
}))
9191
},
9292
)
93+
.boxed()
9394
}
9495

9596
/// GET or POST _elastic/_search
@@ -135,6 +136,7 @@ pub fn es_compat_delete_index_handler(
135136
.and(with_arg(index_service))
136137
.then(es_compat_delete_index)
137138
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
139+
.boxed()
138140
}
139141

140142
/// GET _elastic/_stats
@@ -146,6 +148,7 @@ pub fn es_compat_stats_handler(
146148
.then(es_compat_stats)
147149
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
148150
.recover(recover_fn)
151+
.boxed()
149152
}
150153

151154
/// GET _elastic/{index}/_stats
@@ -157,6 +160,7 @@ pub fn es_compat_index_stats_handler(
157160
.then(es_compat_index_stats)
158161
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
159162
.recover(recover_fn)
163+
.boxed()
160164
}
161165

162166
/// GET _elastic/_cat/indices
@@ -168,6 +172,7 @@ pub fn es_compat_cat_indices_handler(
168172
.then(es_compat_cat_indices)
169173
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
170174
.recover(recover_fn)
175+
.boxed()
171176
}
172177

173178
/// GET _elastic/_cat/indices/{index}
@@ -179,6 +184,7 @@ pub fn es_compat_index_cat_indices_handler(
179184
.then(es_compat_index_cat_indices)
180185
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
181186
.recover(recover_fn)
187+
.boxed()
182188
}
183189

184190
/// GET _elastic/_resolve/index/{index}
@@ -189,6 +195,7 @@ pub fn es_compat_resolve_index_handler(
189195
.and(with_arg(metastore_service))
190196
.then(es_compat_resolve_index)
191197
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
198+
.boxed()
192199
}
193200

194201
/// GET or POST _elastic/{index}/_search
@@ -200,6 +207,7 @@ pub fn es_compat_index_search_handler(
200207
.then(es_compat_index_search)
201208
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
202209
.recover(recover_fn)
210+
.boxed()
203211
}
204212

205213
/// GET or POST _elastic/{index}/_count
@@ -211,6 +219,7 @@ pub fn es_compat_index_count_handler(
211219
.then(es_compat_index_count)
212220
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
213221
.recover(recover_fn)
222+
.boxed()
214223
}
215224

216225
/// POST _elastic/_msearch
@@ -228,6 +237,7 @@ pub fn es_compat_index_multi_search_handler(
228237
RestApiResponse::new(&result, status_code, BodyFormat::default())
229238
})
230239
.recover(recover_fn)
240+
.boxed()
231241
}
232242

233243
/// GET or POST _elastic/_search/scroll
@@ -239,6 +249,7 @@ pub fn es_compat_scroll_handler(
239249
.then(es_scroll)
240250
.map(|result| make_elastic_api_response(result, BodyFormat::default()))
241251
.recover(recover_fn)
252+
.boxed()
242253
}
243254

244255
fn build_request_for_es_api(

quickwit/quickwit-serve/src/index_api/rest_handler.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -90,27 +90,29 @@ pub fn index_management_handlers(
9090
) -> impl Filter<Extract = (impl warp::Reply,), Error = Rejection> + Clone {
9191
// Indexes handlers.
9292
get_index_metadata_handler(index_service.metastore())
93-
.or(list_indexes_metadata_handler(index_service.metastore()))
94-
.or(create_index_handler(index_service.clone(), node_config))
95-
.or(update_index_handler(index_service.metastore()))
96-
.or(clear_index_handler(index_service.clone()))
97-
.or(delete_index_handler(index_service.clone()))
93+
.boxed()
94+
.or(list_indexes_metadata_handler(index_service.metastore()).boxed())
95+
.or(create_index_handler(index_service.clone(), node_config).boxed())
96+
.or(update_index_handler(index_service.metastore()).boxed())
97+
.or(clear_index_handler(index_service.clone()).boxed())
98+
.or(delete_index_handler(index_service.clone()).boxed())
9899
// Splits handlers
99-
.or(list_splits_handler(index_service.metastore()))
100-
.or(describe_index_handler(index_service.metastore()))
101-
.or(mark_splits_for_deletion_handler(index_service.metastore()))
100+
.or(list_splits_handler(index_service.metastore()).boxed())
101+
.or(describe_index_handler(index_service.metastore()).boxed())
102+
.or(mark_splits_for_deletion_handler(index_service.metastore()).boxed())
102103
// Sources handlers.
103-
.or(reset_source_checkpoint_handler(index_service.metastore()))
104-
.or(toggle_source_handler(index_service.metastore()))
105-
.or(create_source_handler(index_service.clone()))
106-
.or(get_source_handler(index_service.metastore()))
107-
.or(delete_source_handler(index_service.metastore()))
108-
.or(get_source_shards_handler(index_service.metastore()))
104+
.or(reset_source_checkpoint_handler(index_service.metastore()).boxed())
105+
.or(toggle_source_handler(index_service.metastore()).boxed())
106+
.or(create_source_handler(index_service.clone()).boxed())
107+
.or(get_source_handler(index_service.metastore()).boxed())
108+
.or(delete_source_handler(index_service.metastore()).boxed())
109+
.or(get_source_shards_handler(index_service.metastore()).boxed())
109110
// Tokenizer handlers.
110-
.or(analyze_request_handler())
111+
.or(analyze_request_handler().boxed())
111112
// Parse query into query AST handler.
112-
.or(parse_query_request_handler())
113+
.or(parse_query_request_handler().boxed())
113114
.recover(recover_fn)
115+
.boxed()
114116
}
115117

116118
fn json_body<T: DeserializeOwned + Send>(

quickwit/quickwit-serve/src/indexing_api/rest_handler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,5 @@ pub fn indexing_get_handler(
6262
.and(extract_format_from_qs())
6363
.map(into_rest_api_response)
6464
.recover(recover_fn)
65+
.boxed()
6566
}

quickwit/quickwit-serve/src/ingest_api/rest_handler.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ pub(crate) fn ingest_api_handlers(
7272
ingest_handler(ingest_service.clone(), config.clone())
7373
.or(tail_handler(ingest_service))
7474
.or(ingest_v2_handler(ingest_router, config))
75+
.boxed()
7576
}
7677

7778
fn ingest_filter(
@@ -96,6 +97,7 @@ fn ingest_handler(
9697
.and(with_arg(ingest_service))
9798
.then(ingest)
9899
.map(|result| into_rest_api_response(result, BodyFormat::default()))
100+
.boxed()
99101
}
100102

101103
fn ingest_v2_filter(
@@ -121,6 +123,7 @@ fn ingest_v2_handler(
121123
.then(ingest_v2)
122124
.and(with_arg(BodyFormat::default()))
123125
.map(into_rest_api_response)
126+
.boxed()
124127
}
125128

126129
async fn ingest_v2(
@@ -223,6 +226,7 @@ pub fn tail_handler(
223226
.then(tail_endpoint)
224227
.and(extract_format_from_qs())
225228
.map(into_rest_api_response)
229+
.boxed()
226230
}
227231

228232
fn tail_filter() -> impl Filter<Extract = (String,), Error = Rejection> + Clone {

quickwit/quickwit-serve/src/jaeger_api/rest_handler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ pub(crate) fn jaeger_api_handlers(
6868
.or(jaeger_traces_search_handler(jaeger_service_opt.clone()))
6969
.or(jaeger_traces_handler(jaeger_service_opt.clone()))
7070
.recover(recover_fn)
71+
.boxed()
7172
}
7273

7374
fn jaeger_api_path_filter() -> impl Filter<Extract = (Vec<String>,), Error = Rejection> + Clone {

0 commit comments

Comments
 (0)