@@ -5,6 +5,7 @@ import { parseManifest } from "./manifest.js";
55import { detectFormat , getParquetFooterLength , parseParquetFooter , parquetMetaToTableMeta } from "./parquet.js" ;
66import type { QueryDORpc } from "./types.js" ;
77import { instantiateWasm , type WasmEngine } from "./wasm-engine.js" ;
8+ import { resolveBucket } from "./bucket.js" ;
89import wasmModule from "./wasm-module.js" ;
910
1011/** Master DO — single writer, reads footers, broadcasts invalidations. */
@@ -63,14 +64,14 @@ export class MasterDO extends DurableObject<Env> {
6364 const tableName = r2Prefix . replace ( / \/ $ / , "" ) . replace ( / \. l a n c e $ / , "" ) . split ( "/" ) . pop ( ) ?? r2Prefix ;
6465
6566 // Find latest manifest
66- const listed = await this . env . DATA_BUCKET . list ( { prefix : `${ r2Prefix } _versions/` , limit : 100 } ) ;
67+ const listed = await resolveBucket ( this . env , r2Prefix ) . list ( { prefix : `${ r2Prefix } _versions/` , limit : 100 } ) ;
6768 const manifestKeys = listed . objects
6869 . filter ( o => o . key . endsWith ( ".manifest" ) )
6970 . sort ( ( a , b ) => a . key . localeCompare ( b . key ) ) ;
7071 if ( manifestKeys . length === 0 ) throw new Error ( "No manifests found" ) ;
7172
7273 const latestKey = manifestKeys [ manifestKeys . length - 1 ] . key ;
73- const manifestObj = await this . env . DATA_BUCKET . get ( latestKey ) ;
74+ const manifestObj = await resolveBucket ( this . env , latestKey ) . get ( latestKey ) ;
7475 if ( ! manifestObj ) throw new Error ( "Failed to read manifest" ) ;
7576
7677 const manifest = parseManifest ( await manifestObj . arrayBuffer ( ) ) ;
@@ -172,15 +173,15 @@ export class MasterDO extends DurableObject<Env> {
172173 const dataR2Key = `${ r2Prefix } ${ dataFilePath } ` ;
173174
174175 // PUT data file to R2 (unique name = no conflict)
175- await this . env . DATA_BUCKET . put ( dataR2Key , fragmentBytes ) ;
176+ await resolveBucket ( this . env , dataR2Key ) . put ( dataR2Key , fragmentBytes ) ;
176177
177178 // CAS loop for manifest update
178179 const MAX_RETRIES = 10 ;
179180 const latestKey = `${ r2Prefix } _versions/_latest` ;
180181
181182 for ( let attempt = 0 ; attempt < MAX_RETRIES ; attempt ++ ) {
182183 // Read current _latest with ETag
183- const latestObj = await this . env . DATA_BUCKET . get ( latestKey ) ;
184+ const latestObj = await resolveBucket ( this . env , latestKey ) . get ( latestKey ) ;
184185 let currentVersion = 0 ;
185186 let etag : string | undefined ;
186187
@@ -198,7 +199,7 @@ export class MasterDO extends DurableObject<Env> {
198199 let existingFragments : { id : number ; filePath : string ; physicalRows : number } [ ] = [ ] ;
199200 if ( currentVersion > 0 ) {
200201 const manifestKey = `${ r2Prefix } _versions/${ currentVersion } .manifest` ;
201- const manifestObj = await this . env . DATA_BUCKET . get ( manifestKey ) ;
202+ const manifestObj = await resolveBucket ( this . env , manifestKey ) . get ( manifestKey ) ;
202203 if ( manifestObj ) {
203204 const manifest = parseManifest ( await manifestObj . arrayBuffer ( ) ) ;
204205 if ( manifest ) existingFragments = manifest . fragments ;
@@ -214,12 +215,12 @@ export class MasterDO extends DurableObject<Env> {
214215 // Write new manifest (protobuf-compatible binary)
215216 const manifestPayload = this . buildManifestBinary ( newVersion , newFragments ) ;
216217 const newManifestKey = `${ r2Prefix } _versions/${ newVersion } .manifest` ;
217- await this . env . DATA_BUCKET . put ( newManifestKey , manifestPayload ) ;
218+ await resolveBucket ( this . env , newManifestKey ) . put ( newManifestKey , manifestPayload ) ;
218219
219220 // CAS: write _latest with ETag condition
220221 try {
221222 const putOptions : R2PutOptions = etag ? { onlyIf : { etagMatches : etag } } : { } ;
222- const result = await this . env . DATA_BUCKET . put ( latestKey , newVersionStr , putOptions ) ;
223+ const result = await resolveBucket ( this . env , latestKey ) . put ( latestKey , newVersionStr , putOptions ) ;
223224
224225 if ( result === null && etag ) {
225226 // 412 Precondition Failed — retry
@@ -346,13 +347,13 @@ export class MasterDO extends DurableObject<Env> {
346347 parsed ?: Footer ; raw : ArrayBuffer ; fileSize : bigint ; columns : ColumnMeta [ ] ;
347348 format : "lance" | "parquet" ;
348349 } | null > {
349- const head = await this . env . DATA_BUCKET . head ( r2Key ) ;
350+ const head = await resolveBucket ( this . env , r2Key ) . head ( r2Key ) ;
350351 if ( ! head ) return null ;
351352
352353 const fileSize = BigInt ( head . size ) ;
353354 // Read last 40 bytes — enough for Lance footer or Parquet tail detection
354355 const tailSize = Math . min ( Number ( fileSize ) , FOOTER_SIZE ) ;
355- const obj = await this . env . DATA_BUCKET . get ( r2Key , {
356+ const obj = await resolveBucket ( this . env , r2Key ) . get ( r2Key , {
356357 range : { offset : Number ( fileSize ) - tailSize , length : tailSize } ,
357358 } ) ;
358359 if ( ! obj ) return null ;
@@ -366,7 +367,7 @@ export class MasterDO extends DurableObject<Env> {
366367
367368 // Fetch full Parquet Thrift footer
368369 const footerOffset = Number ( fileSize ) - footerLen - 8 ;
369- const footerObj = await this . env . DATA_BUCKET . get ( r2Key , {
370+ const footerObj = await resolveBucket ( this . env , r2Key ) . get ( r2Key , {
370371 range : { offset : footerOffset , length : footerLen } ,
371372 } ) ;
372373 if ( ! footerObj ) return null ;
@@ -386,7 +387,7 @@ export class MasterDO extends DurableObject<Env> {
386387 let columns : ColumnMeta [ ] = [ ] ;
387388 const metaLen = Number ( parsed . columnMetaOffsetsStart ) - Number ( parsed . columnMetaStart ) ;
388389 if ( metaLen > 0 ) {
389- const metaObj = await this . env . DATA_BUCKET . get ( r2Key , {
390+ const metaObj = await resolveBucket ( this . env , r2Key ) . get ( r2Key , {
390391 range : { offset : Number ( parsed . columnMetaStart ) , length : metaLen } ,
391392 } ) ;
392393 if ( metaObj ) columns = parseColumnMetaFromProtobuf ( await metaObj . arrayBuffer ( ) , parsed . numColumns ) ;
@@ -456,7 +457,7 @@ export class MasterDO extends DurableObject<Env> {
456457 // List and delete all R2 objects under this prefix
457458 let cursor : string | undefined ;
458459 do {
459- const listed = await this . env . DATA_BUCKET . list ( {
460+ const listed = await resolveBucket ( this . env , r2Prefix ) . list ( {
460461 prefix : r2Prefix ,
461462 cursor,
462463 limit : 1000 ,
@@ -467,7 +468,7 @@ export class MasterDO extends DurableObject<Env> {
467468 bytesFreed += listed . objects . reduce ( ( s , o ) => s + o . size , 0 ) ;
468469 fragmentsDeleted += keys . length ;
469470 // R2 delete supports up to 1000 keys per call
470- await this . env . DATA_BUCKET . delete ( keys ) ;
471+ await resolveBucket ( this . env , r2Prefix ) . delete ( keys ) ;
471472 }
472473
473474 cursor = listed . truncated ? listed . cursor : undefined ;
0 commit comments