Skip to content

Commit

Permalink
Database name mapping (#81)
Browse files Browse the repository at this point in the history
  • Loading branch information
losfair authored Oct 16, 2022
1 parent b4eaaf5 commit 439b8ec
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 3 deletions.
9 changes: 8 additions & 1 deletion mvfs/src/vfs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,17 @@ pub struct MultiVersionVfs {
pub data_plane: String,
pub sector_size: usize,
pub http_client: reqwest::Client,
pub db_name_map: Arc<HashMap<String, String>>,
}

impl MultiVersionVfs {
pub fn open(&self, db: &str) -> Result<Connection> {
pub fn open(&self, db: &str, map_name: bool) -> Result<Connection> {
if map_name {
if let Some(mapped) = self.db_name_map.get(db) {
return self.open(mapped, false);
}
}

let (dp, db) = if db.starts_with("http://") || db.starts_with("https://") {
let url = Url::parse(db)?;
let dp = Url::parse(&url.origin().ascii_serialization())?;
Expand Down
3 changes: 2 additions & 1 deletion mvsqlite-fuse/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ async fn main() -> Result<()> {
data_plane: opt.data_plane.clone(),
sector_size: opt.sector_size,
http_client: reqwest::Client::new(),
db_name_map: Arc::new(Default::default()),
};
let fuse_fs = FuseFs {
namespaces,
Expand Down Expand Up @@ -372,7 +373,7 @@ impl fuser::Filesystem for FuseFs {
.unwrap()
.remove(&ino);
let (ns_name, namespace) = self.namespaces.get_index(inode.ns).unwrap();
let conn = match self.vfs.open(namespace) {
let conn = match self.vfs.open(namespace, false) {
Ok(conn) => conn,
Err(e) => {
tracing::error!(ns = ns_name, error = %e, "failed to open namespace");
Expand Down
15 changes: 15 additions & 0 deletions mvsqlite/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ mod util;
pub mod vfs;

use std::{
collections::HashMap,
ffi::CString,
sync::{atomic::Ordering, Arc},
time::Duration,
Expand Down Expand Up @@ -88,6 +89,18 @@ fn init_with_options_impl(opts: InitOptions) {
10
};

let mut db_name_map: HashMap<String, String> = HashMap::new();
if let Ok(s) = std::env::var("MVSQLITE_DB_NAME_MAP") {
for mapping in s.split(',').map(|x| x.trim()).filter(|x| !x.is_empty()) {
let mut parts = mapping.splitn(2, '=');
let from = parts.next().unwrap();
let to = parts.next().unwrap();
db_name_map.insert(from.to_string(), to.to_string());
}
tracing::debug!(num_entries = db_name_map.len(), "configuring db name map");
}
let db_name_map = Arc::new(db_name_map);

let mut builder = reqwest::ClientBuilder::new();
builder = builder.timeout(Duration::from_secs(timeout_secs));
if force_http2 {
Expand All @@ -104,6 +117,7 @@ fn init_with_options_impl(opts: InitOptions) {
data_plane: data_plane.clone(),
sector_size,
http_client: http_client.clone(),
db_name_map: db_name_map.clone(),
},
};

Expand All @@ -116,6 +130,7 @@ fn init_with_options_impl(opts: InitOptions) {
data_plane: data_plane.clone(),
sector_size,
http_client: http_client.clone(),
db_name_map: db_name_map.clone(),
},
};
sqlite_vfs::register(&format!("{}-{}", VFS_NAME, sector_size), vfs, false)
Expand Down
2 changes: 1 addition & 1 deletion mvsqlite/src/vfs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ impl Vfs for MultiVersionVfs {

let conn = self
.inner
.open(db)
.open(db, true)
.map_err(|e| std::io::Error::new(ErrorKind::Other, e))?;
Ok(Box::new(Connection {
io: self.io.clone(),
Expand Down

0 comments on commit 439b8ec

Please sign in to comment.