duckdb / duckdb-wasm

WebAssembly version of DuckDB
https://shell.duckdb.org
MIT License
1.31k stars 132 forks source link

Error Loading Extensions with COI #1916

Open amiller-gh opened 1 week ago

amiller-gh commented 1 week ago

What happens?

I switched my codebase to the experimental COI implementation, and all extension loading began to fail with:

Error: IO Error: Extension "https://extensions.duckdb.org/v1.1.2/wasm_threads/parquet.duckdb_extension.wasm" could not be loaded: Could not load dynamic lib: parquet
LinkError: WebAssembly.Instance(): Import #3541 "env" "memory": mismatch in shared state of memory, declared = 0, imported = 1
image

My instantiation is as follows:

import * as duckdb from '@duckdb/duckdb-wasm';
import duckdb_pthread_worker from "@duckdb/duckdb-wasm/dist/duckdb-browser-coi.pthread.worker.js?url";
import coi_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-coi.worker.js?url';
import eh_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js?url';
import mvp_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url';
import duckdb_wasm_coi from '@duckdb/duckdb-wasm/dist/duckdb-coi.wasm?url';
import duckdb_wasm_eh from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm?url';
import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm?url';

const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
  mvp: { mainModule: duckdb_wasm, mainWorker: mvp_worker },
  eh: { mainModule: duckdb_wasm_eh, mainWorker: eh_worker },
  coi: { mainModule: duckdb_wasm_coi, mainWorker: coi_worker, pthreadWorker: duckdb_pthread_worker },
};

const logger = new duckdb.ConsoleLogger();
const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
const worker = new Worker(bundle?.mainWorker as string);
const db = new duckdb.AsyncDuckDB(logger, worker);
await db.instantiate(bundle?.mainModule as string, bundle?.pthreadWorker as string);

// Confirmed that this logs the COI modules
console.log('Using DuckDB bundle: ', bundle); 

(Interestingly, I get a different error when I try to load the spatial extension: the fetch call errors with a 403 forbidden, this may be a different error entirely)

To Reproduce

See above instantiation code. I've tested this on 1.92.0, 1.29.1-dev13.0, 1.28.1-dev297.0, and 1.28.1.

Browser/Environment:

Chrome 130

Device:

Macbook Pro

DuckDB-Wasm Version:

1.92.0, 1.29.1-dev13.0, 1.28.1-dev297.0, and 1.28.1

DuckDB-Wasm Deployment:

Loaded locally, installed via NPM, extensions from extensions.duckdb.org

Full Name:

Adam Miller

Affiliation:

Universe

amiller-gh commented 1 week ago

If it helps, this is the error thrown when DuckDB tries to automatically load the extension instead of when I explicitly install it:

Screenshot 2024-11-12 at 4 50 18 PM