Stop requesting persistent storage

This commit is contained in:
Timon
2026-09-02 17:44:37 +00:00
parent dd84cd7417
commit 2f8d423c93
@@ -20,7 +20,6 @@ struct Inner {
on_disk: HashSet<ResourceHash>, on_disk: HashSet<ResourceHash>,
queue: VecDeque<Mutation>, queue: VecDeque<Mutation>,
worker_active: bool, worker_active: bool,
persist_requested: bool,
} }
pub struct OpfsResourceStorage { pub struct OpfsResourceStorage {
@@ -43,7 +42,6 @@ impl OpfsResourceStorage {
on_disk, on_disk,
queue: VecDeque::new(), queue: VecDeque::new(),
worker_active: false, worker_active: false,
persist_requested: false,
})), })),
}) })
} }
@@ -130,25 +128,16 @@ fn kick_worker(inner: &Arc<Mutex<Inner>>, guard: &mut Inner) {
async fn drain_queue(inner: Arc<Mutex<Inner>>) { async fn drain_queue(inner: Arc<Mutex<Inner>>) {
loop { loop {
let (directory, mutation, persist_requested) = { let (directory, mutation) = {
let mut guard = inner.lock().unwrap(); let mut guard = inner.lock().unwrap();
let Some(mutation) = guard.queue.pop_front() else { let Some(mutation) = guard.queue.pop_front() else {
guard.worker_active = false; guard.worker_active = false;
return; return;
}; };
let persist_requested = matches!(mutation, Mutation::Write { .. }) && !guard.persist_requested; (guard.directory.clone(), mutation)
if persist_requested {
guard.persist_requested = true;
}
(guard.directory.clone(), mutation, persist_requested)
}; };
if persist_requested {
request_persistence().await;
}
match mutation { match mutation {
Mutation::Write { hash, bytes } => { Mutation::Write { hash, bytes } => {
if let Err(error) = write_file(&directory, &hash, &bytes).await { if let Err(error) = write_file(&directory, &hash, &bytes).await {
@@ -164,23 +153,6 @@ async fn drain_queue(inner: Arc<Mutex<Inner>>) {
} }
} }
async fn request_persistence() {
let Some(window) = web_sys::window() else {
log::warn!("OPFS persist() skipped: no window");
return;
};
let storage = window.navigator().storage();
match storage.persist() {
Ok(promise) => match JsFuture::from(promise).await {
Ok(value) if value.as_bool() == Some(true) => {}
Ok(_) => log::warn!("OPFS persistence was not granted; browser may evict resources under storage pressure"),
Err(error) => log::warn!("OPFS persist() rejected: {error:?}"),
},
Err(error) => log::warn!("OPFS persist() threw: {error:?}"),
}
}
async fn open_resource_directory(directory_name: &str) -> Result<FileSystemDirectoryHandle, JsValue> { async fn open_resource_directory(directory_name: &str) -> Result<FileSystemDirectoryHandle, JsValue> {
let storage = web_sys::window().ok_or_else(|| JsValue::from_str("no window"))?.navigator().storage(); let storage = web_sys::window().ok_or_else(|| JsValue::from_str("no window"))?.navigator().storage();
let root: FileSystemDirectoryHandle = JsFuture::from(storage.get_directory()).await?.dyn_into()?; let root: FileSystemDirectoryHandle = JsFuture::from(storage.get_directory()).await?.dyn_into()?;