Skip to content

Commit e09c1e7

Browse files
dnwiebeBert
andauthored
GH 624 - Simplify ConfigDao to reduce or eliminate SQLITE_BLOCKED errors (#157)
* Removed extract() from ConfigDao * Seems like it's working * Review issues * Formatting * Versions * GH-624: Don't persist neighbors if they're the same as last time * GH-624: Now warning and skipping past-neighbor storage that fails because of a locked database * GH-627: Clippy should be happy again by now * GH-627: one line was silly * GH-627: starting ignoring the troublesome test again * GH-627: there was a formatting issue * handles_startup_and_shutdown_integration now doesn't run in Actions on Windows * handles_startup_and_shutdown_integration now doesn't run in Actions on Windows * GH-624: In order to circumvent a test, one must return from it * GH-624: Fixed two squirrellinesses Co-authored-by: Bert <[email protected]>
1 parent 0b26033 commit e09c1e7

File tree

13 files changed

+284
-636
lines changed

13 files changed

+284
-636
lines changed

multinode_integration_tests/tests/blockchain_interaction_test.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,10 @@ fn debtors_are_credited_once_but_not_twice() {
7474
MASQRealNode::node_home_dir(&MASQNodeUtils::find_project_root(), &node_name);
7575
open_all_file_permissions(PathBuf::from(node_home_dir));
7676
{
77-
let mut config_dao = config_dao(&node_name);
78-
let mut config_xactn = config_dao.start_transaction().unwrap();
79-
config_xactn
77+
let config_dao = config_dao(&node_name);
78+
config_dao
8079
.set("start_block", Some("1000".to_string()))
8180
.unwrap();
82-
config_xactn.commit().unwrap();
8381
}
8482
{
8583
let receivable_dao = receivable_dao(&node_name);

node/src/blockchain/blockchain_interface.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1836,12 +1836,10 @@ mod tests {
18361836
#[test]
18371837
fn blockchain_interface_non_clandestine_can_fetch_transaction_receipt() {
18381838
let port = find_free_port();
1839-
thread::spawn(move || {
1840-
Server::new(|_req, mut rsp| {
1841-
Ok(rsp.body(br#"{"jsonrpc":"2.0","id":2,"result":{"transactionHash":"0xa128f9ca1e705cc20a936a24a7fa1df73bad6e0aaf58e8e6ffcc154a7cff6e0e","blockHash":"0x6d0abccae617442c26104c2bc63d1bc05e1e002e555aec4ab62a46e826b18f18","blockNumber":"0xb0328d","contractAddress":null,"cumulativeGasUsed":"0x60ef","effectiveGasPrice":"0x22ecb25c00","from":"0x7424d05b59647119b01ff81e2d3987b6c358bf9c","gasUsed":"0x60ef","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000","status":"0x0","to":"0x384dec25e03f94931767ce4c3556168468ba24c3","transactionIndex":"0x0","type":"0x0"}}"#.to_vec())?)
1842-
})
1843-
.listen(&Ipv4Addr::LOCALHOST.to_string(), &format!("{}", port));
1844-
});
1839+
let _test_server = TestServer::start (port, vec![
1840+
br#"{"jsonrpc":"2.0","id":2,"result":{"transactionHash":"0xa128f9ca1e705cc20a936a24a7fa1df73bad6e0aaf58e8e6ffcc154a7cff6e0e","blockHash":"0x6d0abccae617442c26104c2bc63d1bc05e1e002e555aec4ab62a46e826b18f18","blockNumber":"0xb0328d","contractAddress":null,"cumulativeGasUsed":"0x60ef","effectiveGasPrice":"0x22ecb25c00","from":"0x7424d05b59647119b01ff81e2d3987b6c358bf9c","gasUsed":"0x60ef","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000","status":"0x0","to":"0x384dec25e03f94931767ce4c3556168468ba24c3","transactionIndex":"0x0","type":"0x0"}}"#
1841+
.to_vec()
1842+
]);
18451843
let (event_loop_handle, transport) = Http::with_max_parallel(
18461844
&format!("http://{}:{}", &Ipv4Addr::LOCALHOST.to_string(), port),
18471845
REQUESTS_IN_PARALLEL,

node/src/daemon/setup_reporter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,7 @@ mod tests {
10361036
use crate::daemon::setup_reporter;
10371037
use crate::database::connection_wrapper::ConnectionWrapperReal;
10381038
use crate::database::db_initializer::{DbInitializer, DbInitializerReal, DATABASE_FILE};
1039-
use crate::db_config::config_dao::{ConfigDaoRead, ConfigDaoReal};
1039+
use crate::db_config::config_dao::{ConfigDao, ConfigDaoReal};
10401040
use crate::db_config::persistent_configuration::{
10411041
PersistentConfigError, PersistentConfiguration, PersistentConfigurationReal,
10421042
};

node/src/database/config_dumper.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::database::db_initializer::{
77
DbInitializer, DbInitializerReal, InitializationError, DATABASE_FILE,
88
};
99
use crate::database::db_migrations::MigratorConfig;
10-
use crate::db_config::config_dao::{ConfigDaoRead, ConfigDaoReal, ConfigDaoRecord};
10+
use crate::db_config::config_dao::{ConfigDao, ConfigDaoReal, ConfigDaoRecord};
1111
use crate::db_config::typed_config_layer::{decode_bytes, encode_bytes};
1212
use crate::node_configurator::DirsWrapperReal;
1313
use crate::node_configurator::{
@@ -156,6 +156,7 @@ mod tests {
156156
use crate::database::connection_wrapper::ConnectionWrapperReal;
157157
use crate::database::db_initializer::CURRENT_SCHEMA_VERSION;
158158
use crate::database::db_migrations::ExternalData;
159+
use crate::db_config::config_dao::ConfigDao;
159160
use crate::db_config::persistent_configuration::{
160161
PersistentConfiguration, PersistentConfigurationReal,
161162
};

node/src/database/connection_wrapper.rs

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,9 @@
33
use rusqlite::{Connection, Error, Statement, Transaction};
44
use std::fmt::Debug;
55

6-
#[cfg(test)]
7-
use std::any::Any;
8-
96
pub trait ConnectionWrapper: Debug + Send {
107
fn prepare(&self, query: &str) -> Result<Statement, rusqlite::Error>;
118
fn transaction<'a: 'b, 'b>(&'a mut self) -> Result<Transaction<'b>, rusqlite::Error>;
12-
13-
#[cfg(test)]
14-
fn as_any(&self) -> &dyn Any {
15-
intentionally_blank!()
16-
}
179
}
1810

1911
#[derive(Debug)]
@@ -28,64 +20,10 @@ impl ConnectionWrapper for ConnectionWrapperReal {
2820
fn transaction<'a: 'b, 'b>(&'a mut self) -> Result<Transaction<'b>, Error> {
2921
self.conn.transaction()
3022
}
31-
32-
#[cfg(test)]
33-
fn as_any(&self) -> &dyn Any {
34-
self
35-
}
3623
}
3724

3825
impl ConnectionWrapperReal {
3926
pub fn new(conn: Connection) -> Self {
4027
Self { conn }
4128
}
4229
}
43-
44-
#[cfg(test)]
45-
mod tests {
46-
use crate::database::db_initializer::{
47-
DbInitializer, DbInitializerReal, CURRENT_SCHEMA_VERSION,
48-
};
49-
use crate::database::db_migrations::MigratorConfig;
50-
use crate::db_config::config_dao::{ConfigDao, ConfigDaoRead, ConfigDaoReal};
51-
use masq_lib::test_utils::utils::ensure_node_home_directory_exists;
52-
53-
#[test]
54-
fn commit_works() {
55-
let data_dir = ensure_node_home_directory_exists("connection_wrapper", "commit_works");
56-
let conn = DbInitializerReal::default()
57-
.initialize(&data_dir, true, MigratorConfig::test_default())
58-
.unwrap();
59-
let mut config_dao = ConfigDaoReal::new(conn);
60-
{
61-
let mut writer = config_dao.start_transaction().unwrap();
62-
writer
63-
.set("schema_version", Some("booga".to_string()))
64-
.unwrap();
65-
writer.commit().unwrap();
66-
}
67-
68-
let result = config_dao.get("schema_version").unwrap().value_opt;
69-
70-
assert_eq!(result, Some("booga".to_string()));
71-
}
72-
73-
#[test]
74-
fn drop_works() {
75-
let data_dir = ensure_node_home_directory_exists("connection_wrapper", "drop_works");
76-
let conn = DbInitializerReal::default()
77-
.initialize(&data_dir, true, MigratorConfig::test_default())
78-
.unwrap();
79-
let mut config_dao = ConfigDaoReal::new(conn);
80-
{
81-
let writer = config_dao.start_transaction().unwrap();
82-
writer
83-
.set("schema_version", Some("booga".to_string()))
84-
.unwrap();
85-
}
86-
87-
let result = config_dao.get("schema_version").unwrap().value_opt;
88-
89-
assert_eq!(result, Some(CURRENT_SCHEMA_VERSION.to_string()));
90-
}
91-
}

node/src/database/db_initializer.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ pub mod test_utils {
609609
#[cfg(test)]
610610
mod tests {
611611
use super::*;
612-
use crate::db_config::config_dao::{ConfigDaoRead, ConfigDaoReal};
612+
use crate::db_config::config_dao::{ConfigDao, ConfigDaoReal};
613613
use crate::test_utils::database_utils::{
614614
assert_create_table_statement_contains_all_important_parts,
615615
assert_index_statement_is_coupled_with_right_parameter, assert_no_index_exists_for_table,
@@ -1143,14 +1143,9 @@ mod tests {
11431143
)
11441144
);
11451145
let mut migrate_database_params = migrate_database_params_arc.lock().unwrap();
1146-
let (mismatched_schema, target_version, connection_wrapper) =
1147-
migrate_database_params.remove(0);
1146+
let (mismatched_schema, target_version, _) = migrate_database_params.remove(0);
11481147
assert_eq!(mismatched_schema, 0);
11491148
assert_eq!(target_version, 5);
1150-
assert!(connection_wrapper
1151-
.as_any()
1152-
.downcast_ref::<ConnectionWrapperReal>()
1153-
.is_some());
11541149
TestLogHandler::new().exists_log_containing(
11551150
"WARN: DbInitializer: Database is incompatible and its updating is necessary",
11561151
);

0 commit comments

Comments
 (0)