Skip to content

Commit 18b37db

Browse files
committed
Unify the one-off and websocket Coordinator factories
These share the same underlying resources and exhausting one should prevent the other from consuming more resources.
1 parent 57d03e8 commit 18b37db

File tree

2 files changed

+26
-44
lines changed

2 files changed

+26
-44
lines changed

ui/src/main.rs

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ use tracing_subscriber::EnvFilter;
1111

1212
const DEFAULT_ADDRESS: &str = "127.0.0.1";
1313
const DEFAULT_PORT: u16 = 5000;
14-
const DEFAULT_COORDINATORS_ONE_OFF_LIMIT: usize = 10;
15-
const DEFAULT_COORDINATORS_WEBSOCKET_LIMIT: usize = 50;
14+
const DEFAULT_COORDINATORS_LIMIT: usize = 10;
1615

1716
mod env;
1817
mod gist;
@@ -48,8 +47,7 @@ struct Config {
4847
feature_flags: FeatureFlags,
4948
request_db_path: Option<PathBuf>,
5049
id_provider: Arc<dyn IdProvider>,
51-
coordinators_one_off_limit: usize,
52-
coordinators_websocket_limit: usize,
50+
coordinators_limit: usize,
5351
port: u16,
5452
root: PathBuf,
5553
}
@@ -109,15 +107,10 @@ impl Config {
109107

110108
let id_provider = Arc::new(GlobalIdProvider::new());
111109

112-
let coordinators_one_off_limit = env::var("PLAYGROUND_COORDINATORS_ONE_OFF_LIMIT")
110+
let coordinators_limit = env::var("PLAYGROUND_COORDINATORS_LIMIT")
113111
.ok()
114112
.and_then(|l| l.parse().ok())
115-
.unwrap_or(DEFAULT_COORDINATORS_ONE_OFF_LIMIT);
116-
117-
let coordinators_websocket_limit = env::var("PLAYGROUND_COORDINATORS_WEBSOCKET_LIMIT")
118-
.ok()
119-
.and_then(|l| l.parse().ok())
120-
.unwrap_or(DEFAULT_COORDINATORS_WEBSOCKET_LIMIT);
113+
.unwrap_or(DEFAULT_COORDINATORS_LIMIT);
121114

122115
Self {
123116
address,
@@ -127,8 +120,7 @@ impl Config {
127120
feature_flags,
128121
request_db_path,
129122
id_provider,
130-
coordinators_one_off_limit,
131-
coordinators_websocket_limit,
123+
coordinators_limit,
132124
port,
133125
root,
134126
}
@@ -165,12 +157,8 @@ impl Config {
165157
request_db.expect("Unable to open request log database")
166158
}
167159

168-
fn coordinator_one_off_factory(&self) -> CoordinatorFactory {
169-
CoordinatorFactory::new(self.id_provider.clone(), self.coordinators_one_off_limit)
170-
}
171-
172-
fn coordinator_websocket_factory(&self) -> CoordinatorFactory {
173-
CoordinatorFactory::new(self.id_provider.clone(), self.coordinators_websocket_limit)
160+
fn coordinator_factory(&self) -> CoordinatorFactory {
161+
CoordinatorFactory::new(self.id_provider.clone(), self.coordinators_limit)
174162
}
175163

176164
fn server_socket_addr(&self) -> SocketAddr {

ui/src/server_axum.rs

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,11 @@ const DOCKER_PROCESS_TIMEOUT_SOFT: Duration = Duration::from_secs(10);
6262
mod websocket;
6363

6464
#[derive(Debug, Clone)]
65-
struct CoordinatorOneOffFactory(Arc<CoordinatorFactory>);
66-
67-
#[derive(Debug, Clone)]
68-
struct CoordinatorWebsocketFactory(Arc<CoordinatorFactory>);
65+
struct Factory(Arc<CoordinatorFactory>);
6966

7067
#[tokio::main]
7168
pub(crate) async fn serve(config: Config) {
72-
let one_off_factory = CoordinatorOneOffFactory(Arc::new(config.coordinator_one_off_factory()));
73-
let websocket_factory =
74-
CoordinatorWebsocketFactory(Arc::new(config.coordinator_websocket_factory()));
69+
let factory = Factory(Arc::new(config.coordinator_factory()));
7570

7671
let request_db = config.request_database();
7772
let (_db_task, db_handle) = request_db.spawn();
@@ -106,8 +101,7 @@ pub(crate) async fn serve(config: Config) {
106101
.route("/websocket", get(websocket))
107102
.route("/nowebsocket", post(nowebsocket))
108103
.route("/whynowebsocket", get(whynowebsocket))
109-
.layer(Extension(one_off_factory))
110-
.layer(Extension(websocket_factory))
104+
.layer(Extension(factory))
111105
.layer(Extension(db_handle))
112106
.layer(Extension(Arc::new(SandboxCache::default())))
113107
.layer(Extension(config.github_token()))
@@ -218,7 +212,7 @@ where
218212
// This is a backwards compatibilty shim. The Rust documentation uses
219213
// this to run code in place.
220214
async fn evaluate(
221-
Extension(factory): Extension<CoordinatorOneOffFactory>,
215+
Extension(factory): Extension<Factory>,
222216
Extension(db): Extension<Handle>,
223217
Json(req): Json<api::EvaluateRequest>,
224218
) -> Result<Json<api::EvaluateResponse>> {
@@ -233,7 +227,7 @@ async fn evaluate(
233227
}
234228

235229
async fn compile(
236-
Extension(factory): Extension<CoordinatorOneOffFactory>,
230+
Extension(factory): Extension<Factory>,
237231
Extension(db): Extension<Handle>,
238232
Json(req): Json<api::CompileRequest>,
239233
) -> Result<Json<api::CompileResponse>> {
@@ -248,7 +242,7 @@ async fn compile(
248242
}
249243

250244
async fn execute(
251-
Extension(factory): Extension<CoordinatorOneOffFactory>,
245+
Extension(factory): Extension<Factory>,
252246
Extension(db): Extension<Handle>,
253247
Json(req): Json<api::ExecuteRequest>,
254248
) -> Result<Json<api::ExecuteResponse>> {
@@ -263,7 +257,7 @@ async fn execute(
263257
}
264258

265259
async fn format(
266-
Extension(factory): Extension<CoordinatorOneOffFactory>,
260+
Extension(factory): Extension<Factory>,
267261
Extension(db): Extension<Handle>,
268262
Json(req): Json<api::FormatRequest>,
269263
) -> Result<Json<api::FormatResponse>> {
@@ -278,7 +272,7 @@ async fn format(
278272
}
279273

280274
async fn clippy(
281-
Extension(factory): Extension<CoordinatorOneOffFactory>,
275+
Extension(factory): Extension<Factory>,
282276
Extension(db): Extension<Handle>,
283277
Json(req): Json<api::ClippyRequest>,
284278
) -> Result<Json<api::ClippyResponse>> {
@@ -293,7 +287,7 @@ async fn clippy(
293287
}
294288

295289
async fn miri(
296-
Extension(factory): Extension<CoordinatorOneOffFactory>,
290+
Extension(factory): Extension<Factory>,
297291
Extension(db): Extension<Handle>,
298292
Json(req): Json<api::MiriRequest>,
299293
) -> Result<Json<api::MiriResponse>> {
@@ -308,7 +302,7 @@ async fn miri(
308302
}
309303

310304
async fn macro_expansion(
311-
Extension(factory): Extension<CoordinatorOneOffFactory>,
305+
Extension(factory): Extension<Factory>,
312306
Extension(db): Extension<Handle>,
313307
Json(req): Json<api::MacroExpansionRequest>,
314308
) -> Result<Json<api::MacroExpansionResponse>> {
@@ -478,7 +472,7 @@ where
478472
}
479473

480474
async fn meta_crates(
481-
Extension(factory): Extension<CoordinatorOneOffFactory>,
475+
Extension(factory): Extension<Factory>,
482476
Extension(cache): Extension<Arc<SandboxCache>>,
483477
if_none_match: Option<TypedHeader<IfNoneMatch>>,
484478
) -> Result<impl IntoResponse> {
@@ -489,7 +483,7 @@ async fn meta_crates(
489483
}
490484

491485
async fn meta_versions(
492-
Extension(factory): Extension<CoordinatorOneOffFactory>,
486+
Extension(factory): Extension<Factory>,
493487
Extension(cache): Extension<Arc<SandboxCache>>,
494488
if_none_match: Option<TypedHeader<IfNoneMatch>>,
495489
) -> Result<impl IntoResponse> {
@@ -500,7 +494,7 @@ async fn meta_versions(
500494
}
501495

502496
async fn meta_version_stable(
503-
Extension(factory): Extension<CoordinatorOneOffFactory>,
497+
Extension(factory): Extension<Factory>,
504498
Extension(cache): Extension<Arc<SandboxCache>>,
505499
if_none_match: Option<TypedHeader<IfNoneMatch>>,
506500
) -> Result<impl IntoResponse> {
@@ -512,7 +506,7 @@ async fn meta_version_stable(
512506
}
513507

514508
async fn meta_version_beta(
515-
Extension(factory): Extension<CoordinatorOneOffFactory>,
509+
Extension(factory): Extension<Factory>,
516510
Extension(cache): Extension<Arc<SandboxCache>>,
517511
if_none_match: Option<TypedHeader<IfNoneMatch>>,
518512
) -> Result<impl IntoResponse> {
@@ -523,7 +517,7 @@ async fn meta_version_beta(
523517
}
524518

525519
async fn meta_version_nightly(
526-
Extension(factory): Extension<CoordinatorOneOffFactory>,
520+
Extension(factory): Extension<Factory>,
527521
Extension(cache): Extension<Arc<SandboxCache>>,
528522
if_none_match: Option<TypedHeader<IfNoneMatch>>,
529523
) -> Result<impl IntoResponse> {
@@ -535,7 +529,7 @@ async fn meta_version_nightly(
535529
}
536530

537531
async fn meta_version_rustfmt(
538-
Extension(factory): Extension<CoordinatorOneOffFactory>,
532+
Extension(factory): Extension<Factory>,
539533
Extension(cache): Extension<Arc<SandboxCache>>,
540534
if_none_match: Option<TypedHeader<IfNoneMatch>>,
541535
) -> Result<impl IntoResponse> {
@@ -547,7 +541,7 @@ async fn meta_version_rustfmt(
547541
}
548542

549543
async fn meta_version_clippy(
550-
Extension(factory): Extension<CoordinatorOneOffFactory>,
544+
Extension(factory): Extension<Factory>,
551545
Extension(cache): Extension<Arc<SandboxCache>>,
552546
if_none_match: Option<TypedHeader<IfNoneMatch>>,
553547
) -> Result<impl IntoResponse> {
@@ -559,7 +553,7 @@ async fn meta_version_clippy(
559553
}
560554

561555
async fn meta_version_miri(
562-
Extension(factory): Extension<CoordinatorOneOffFactory>,
556+
Extension(factory): Extension<Factory>,
563557
Extension(cache): Extension<Arc<SandboxCache>>,
564558
if_none_match: Option<TypedHeader<IfNoneMatch>>,
565559
) -> Result<impl IntoResponse> {
@@ -649,7 +643,7 @@ async fn metrics(_: MetricsAuthorization) -> Result<Vec<u8>, StatusCode> {
649643

650644
async fn websocket(
651645
ws: WebSocketUpgrade,
652-
Extension(factory): Extension<CoordinatorWebsocketFactory>,
646+
Extension(factory): Extension<Factory>,
653647
Extension(feature_flags): Extension<crate::FeatureFlags>,
654648
Extension(db): Extension<Handle>,
655649
) -> impl IntoResponse {

0 commit comments

Comments
 (0)