1818 */
1919const APIError = require ( "../../api/APIError" ) ;
2020const { Sequence } = require ( "../../codex/Sequence" ) ;
21+ const { MemoryFSProvider } = require ( "../../modules/puterfs/customfs/MemoryFSProvider" ) ;
2122
2223const { DB_WRITE } = require ( "../../services/database/consts" ) ;
2324const { buffer_to_stream } = require ( "../../util/streamutil" ) ;
@@ -115,10 +116,13 @@ class LLRead extends LLFilesystemOperation {
115116 } ,
116117 async function create_S3_read_stream ( a ) {
117118 const context = a . iget ( 'context' ) ;
118- const storage = context . get ( 'storage' ) ;
119119
120120 const { fsNode, version_id, offset, length, has_range, range } = a . values ( ) ;
121121
122+ const svc_mountpoint = context . get ( 'services' ) . get ( 'mountpoint' ) ;
123+ const provider = await svc_mountpoint . get_provider ( fsNode . selector ) ;
124+ const storage = svc_mountpoint . get_storage ( provider . constructor ) ;
125+
122126 // Empty object here is in the case of local fiesystem,
123127 // where s3:location will return null.
124128 // TODO: storage interface shouldn't have S3-specific properties.
@@ -130,6 +134,7 @@ class LLRead extends LLFilesystemOperation {
130134 bucket_region : location . bucket_region ,
131135 version_id,
132136 key : location . key ,
137+ memory_file : fsNode . entry ,
133138 ...( range ? { range} : ( has_range ? {
134139 range : `bytes=${ offset } -${ offset + length - 1 } `
135140 } : { } ) ) ,
@@ -144,8 +149,11 @@ class LLRead extends LLFilesystemOperation {
144149 const { fsNode, stream, has_range, range} = a . values ( ) ;
145150
146151 if ( ! has_range ) {
147- const res = await svc_fileCache . maybe_store ( fsNode , stream ) ;
148- if ( res . stream ) a . set ( 'stream' , res . stream ) ;
152+ // only cache for non-memoryfs providers
153+ if ( ! ( fsNode . provider instanceof MemoryFSProvider ) ) {
154+ const res = await svc_fileCache . maybe_store ( fsNode , stream ) ;
155+ if ( res . stream ) a . set ( 'stream' , res . stream ) ;
156+ }
149157 }
150158 } ,
151159 async function return_stream ( a ) {
0 commit comments