Skip to content

OPFS: Error calling db.open with coi workerΒ #2096

@thesmartwon

Description

@thesmartwon

What happens?

duckdb-browser-coi.worker.ts crashes after page reload with:

DataCloneError: Failed to execute 'postMessage' on 'Worker': FileSystemSyncAccessHandle object could not be cloned.
    at ha.registerFileHandle (duckdb-browser-coi.worker.ts:33:16)
    at ha.registerFileHandleAsync (duckdb-browser-coi.worker.ts:33:16)
    at async ha.prepareDBFileHandle (duckdb-browser-coi.worker.ts:33:16)
    at async xo.onMessage (duckdb-browser-coi.worker.ts:33:16)
    at async globalThis.onmessage (duckdb-browser-coi.worker.ts:33:16)

To Reproduce

import * as duckdb from "@duckdb/duckdb-wasm";
import duckdb_coi from "@duckdb/duckdb-wasm/dist/duckdb-coi.wasm?url";
import duckdb_coi_worker_pthread from "@duckdb/duckdb-wasm/dist/duckdb-browser-coi.pthread.worker.js?url";
import duckdb_coi_worker from "@duckdb/duckdb-wasm/dist/duckdb-browser-coi.worker.js?url";

const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
	coi: {
		mainModule: duckdb_coi,
		mainWorker: duckdb_coi_worker,
		pthreadWorker: duckdb_coi_worker_pthread,
	},
};

const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
const worker = new Worker(bundle.mainWorker!);
const logger = new duckdb.ConsoleLogger();
const db = new duckdb.AsyncDuckDB(logger, worker);
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
await db.open({
	path: "opfs://persisted.db",
	accessMode: duckdb.DuckDBAccessMode.READ_WRITE,
});
const conn = await db.connection();
await c.query("CREATE TABLE IF NOT EXISTS ttable AS SELECT 1");

Browser/Environment:

any

Device:

any

DuckDB-Wasm Version:

1.30.0

DuckDB-Wasm Deployment:

Unreleased

Full Name:

thesmartwon

Affiliation:

none

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions