summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjakka <jakkadoujin@gmail.com>2025-07-02 18:35:52 +0300
committerjakka <jakkadoujin@gmail.com>2025-07-02 18:35:52 +0300
commite38439f8012eabcd827c5abb7b7448a525feaf98 (patch)
tree6bdb5a9e45cd1262ccb9c6476d06ac9358fae3c2 /src
parent7443b2547c2d68ccedf6ed7612d753c9ba91fa25 (diff)
added more connections for more threads
Diffstat (limited to 'src')
-rw-r--r--src/db.rs13
-rw-r--r--src/files.rs4
-rw-r--r--src/main.rs6
3 files changed, 14 insertions, 9 deletions
diff --git a/src/db.rs b/src/db.rs
index 616ef2d..6e1667b 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -22,17 +22,20 @@ const DEDUPE_DB: &str =
"DELETE FROM flacs WHERE rowid NOT IN (SELECT MAX(rowid) FROM flacs GROUP BY path)";
const GET_MODTIME: &str = "SELECT modtime FROM flacs WHERE path = ?1";
-pub fn open_db(path: Option<impl AsRef<Path>>) -> Result<Pool<SqliteConnectionManager>> {
+pub fn open_db(
+ path: Option<impl AsRef<Path>>,
+ threads: usize,
+) -> Result<Pool<SqliteConnectionManager>> {
if let Some(file) = path {
let manager = SqliteConnectionManager::file(file);
- let pool = Pool::builder().build(manager)?;
+ let pool = Pool::builder().max_size(threads as u32).build(manager)?;
let conn = pool.get()?;
conn.execute(TABLE_CREATE, ())?;
Ok(pool)
} else if let Some(base_dir) = BaseDirs::new() {
let file = Path::new(base_dir.data_dir()).join("reencoder.db");
let manager = SqliteConnectionManager::file(file);
- let pool = Pool::builder().build(manager)?;
+ let pool = Pool::builder().max_size(threads as u32).build(manager)?;
let conn = pool.get()?;
conn.execute(TABLE_CREATE, ())?;
Ok(pool)
@@ -160,7 +163,7 @@ mod tests {
let dbname = String::from("temp1.db");
let filenames = ["16bit.flac", "24bit.flac", "32bit.flac"];
let mut counter = 0;
- let pool = open_db(Some(&dbname)).unwrap();
+ let pool = open_db(Some(&dbname), 10).unwrap();
let conn = Database::new(pool.get().unwrap());
for file in filenames {
let _ = conn.insert_file(&file.to_string());
@@ -179,7 +182,7 @@ mod tests {
fn check_update() {
let dbname = String::from("temp2.db");
let filenames = ["16bit.flac", "24bit.flac", "32bit.flac"];
- let pool = open_db(Some(&dbname)).unwrap();
+ let pool = open_db(Some(&dbname), 10).unwrap();
let conn = Database::new(pool.get().unwrap());
for file in filenames {
let _ = conn.insert_file(Path::new(file).canonicalize().unwrap());
diff --git a/src/files.rs b/src/files.rs
index a92a07a..8b089e8 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -229,7 +229,7 @@ mod tests {
#[test]
fn test_index_lots_of_files() {
let handler = Arc::new(AtomicBool::new(true));
- let pool = open_db(Some("temp3.db")).unwrap();
+ let pool = open_db(Some("temp3.db"), 10).unwrap();
index_files_recursively(Path::new("./testfiles"), &pool, handler).unwrap();
std::fs::remove_file("temp3.db").unwrap();
}
@@ -237,7 +237,7 @@ mod tests {
#[test]
fn test_reencode_lots_of_files() {
let handler = Arc::new(AtomicBool::new(true));
- let pool = open_db(Some("temp4.db")).unwrap();
+ let pool = open_db(Some("temp4.db"), 10).unwrap();
let temp = handler.clone();
index_files_recursively(Path::new("./testfiles"), &pool, temp).unwrap();
let conn = Database::new(pool.get().unwrap());
diff --git a/src/main.rs b/src/main.rs
index da62d1e..6d0a3d4 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -92,7 +92,9 @@ fn main() -> Result<()> {
r.store(false, Ordering::SeqCst);
})?;
- let dbpool = db::open_db(args.get_one::<PathBuf>("db"))?;
+ let threads = *args.get_one::<usize>("threads").unwrap();
+
+ let dbpool = db::open_db(args.get_one::<PathBuf>("db"), threads)?;
let path = args.get_one::<PathBuf>("path");
@@ -104,7 +106,7 @@ fn main() -> Result<()> {
}
let pool = rayon::ThreadPoolBuilder::new()
- .num_threads(*args.get_one::<usize>("threads").unwrap())
+ .num_threads(threads)
.build()?;
if let Some(realpath) = path {