Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

editoast: fix db connections pool size #2663

Merged
merged 1 commit into from
Dec 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion editoast/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ $ cargo run -- runserver

```sh
# limit threads to avoid test errors with database connections
export RUST_TEST_THREADS=2
cargo test
```

Expand Down
3 changes: 3 additions & 0 deletions editoast/src/client/postgres_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ pub struct PostgresConfig {
#[derivative(Default(value = "5432"))]
#[clap(long, env, default_value_t = 5432)]
pub psql_port: u16,
#[derivative(Default(value = "32"))]
#[clap(long, env, default_value_t = 32)]
pub pool_size: u16,
}

impl PostgresConfig {
Expand Down
3 changes: 3 additions & 0 deletions editoast/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ async fn run() -> Result<(), Box<dyn Error + Send + Sync>> {
Commands::ImportRailjson(args) => import_railjson(args, pg_config),
}
}
/// Create a rocket server given the config
pub fn create_server(
runserver_config: &RunserverArgs,
pg_config: &PostgresConfig,
Expand All @@ -68,6 +69,7 @@ pub fn create_server(
.merge(("port", runserver_config.port))
.merge(("address", runserver_config.address.clone()))
.merge(("databases.postgres.url", pg_config.url()))
.merge(("databases.postgres.pool_size", pg_config.pool_size))
.merge(("limits.json", 250 * 1024 * 1024)) // Set limits to 250MiB
;

Expand Down Expand Up @@ -98,6 +100,7 @@ pub fn create_server(
rocket
}

/// Create and run the server
async fn runserver(
args: RunserverArgs,
pg_config: PostgresConfig,
Expand Down
2 changes: 1 addition & 1 deletion editoast/src/schema/signal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ pub struct Signal {
pub extensions: SignalExtensions,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct LogicalSignal {
pub signaling_system: String,
pub next_signaling_systems: Vec<String>,
Expand Down
38 changes: 9 additions & 29 deletions editoast/src/views/infra/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -247,28 +247,23 @@ async fn unlock(infra: i32, conn: DBConnection) -> ApiResult<Custom<JsonValue>>

#[cfg(test)]
mod tests {
use crate::create_server;
use crate::infra::Infra;
use crate::schema::operation::{Operation, RailjsonObject};
use crate::schema::SwitchType;
use crate::views::tests::create_test_client;
use rocket::http::{ContentType, Status};
use rocket::local::blocking::Client;
use serde::Deserialize;

#[test]
fn infra_list() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");
let client = create_test_client();
let response = client.get("/infra").dispatch();
assert_eq!(response.status(), Status::Ok);
}

#[test]
fn infra_create_delete() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");
let client = create_test_client();
let create_infra_response = client
.post("/infra")
.header(ContentType::JSON)
Expand All @@ -289,9 +284,7 @@ mod tests {

#[test]
fn infra_get() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");
let client = create_test_client();
let create_infra_response = client
.post("/infra")
.header(ContentType::JSON)
Expand All @@ -317,8 +310,7 @@ mod tests {

#[test]
fn infra_rename() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
let client = Client::tracked(rocket).expect("valid rocket instance");
let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand All @@ -342,10 +334,7 @@ mod tests {

#[test]
fn infra_refresh() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra_response = client
.post("/infra")
.header(ContentType::JSON)
Expand Down Expand Up @@ -378,10 +367,7 @@ mod tests {

#[test]
fn infra_refresh_force() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand Down Expand Up @@ -413,10 +399,7 @@ mod tests {

#[test]
fn infra_get_switch_types() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand Down Expand Up @@ -459,10 +442,7 @@ mod tests {

#[test]
fn infra_lock() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand Down
38 changes: 10 additions & 28 deletions editoast/src/views/infra/objects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,25 +129,16 @@ pub async fn get_objects(

#[cfg(test)]
mod tests {
use rocket::{
http::{ContentType, Status},
local::blocking::Client,
};
use rocket::http::{ContentType, Status};

use crate::infra::Infra;
use crate::schema::operation::{Operation, RailjsonObject};
use crate::schema::SwitchType;
use crate::views::tests::create_test_client;

use crate::{
create_server,
infra::Infra,
schema::{
operation::{Operation, RailjsonObject},
SwitchType,
},
};
#[test]
fn check_invalid_ids() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand All @@ -167,10 +158,7 @@ mod tests {
}
#[test]
fn get_objects_no_ids() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand All @@ -191,10 +179,7 @@ mod tests {

#[test]
fn get_objects_duplicate_ids() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand All @@ -215,10 +200,7 @@ mod tests {

#[test]
fn get_switch_types() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());

let client = Client::tracked(rocket).expect("valid rocket instance");

let client = create_test_client();
let create_infra = client
.post("/infra")
.header(ContentType::JSON)
Expand Down
15 changes: 13 additions & 2 deletions editoast/src/views/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,25 @@ pub async fn health(conn: DBConnection) -> &'static str {

#[cfg(test)]
mod tests {
use crate::client::PostgresConfig;
use crate::create_server;
use rocket::http::Status;
use rocket::local::blocking::Client;

/// Create a test editoast client
/// This client create a single new connection to the database
pub fn create_test_client() -> Client {
let pg_config = PostgresConfig {
pool_size: 1,
..Default::default()
};
let rocket = create_server(&Default::default(), &pg_config, Default::default());
Client::tracked(rocket).expect("valid rocket instance")
}

#[test]
fn health() {
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
let client = Client::tracked(rocket).expect("valid rocket instance");
let client = create_test_client();
let response = client.get("/health").dispatch();
assert_eq!(response.status(), Status::Ok);
}
Expand Down