UBERF-8578: Fix extra stat call for storage adapter (#7132)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev
2024-11-08 17:36:15 +07:00
committed by GitHub
parent a05e2a31d9
commit 04c8c2ffa0
5 changed files with 79 additions and 63 deletions
+19 -13
View File
@@ -29,6 +29,7 @@ import core, {
} from '@hcengineering/core'
import { getMetadata } from '@hcengineering/platform'
import serverCore, {
NoSuchKeyError,
type BlobStorageIterator,
type ListBlobResult,
type StorageAdapter,
@@ -316,21 +317,26 @@ export class S3Service implements StorageAdapter {
}
async doGet (ctx: MeasureContext, workspaceId: WorkspaceId, objectName: string, range?: string): Promise<Readable> {
const res = await this.client.getObject({
Bucket: this.getBucketId(workspaceId),
Key: this.getDocumentKey(workspaceId, objectName),
Range: range
})
try {
const res = await this.client.getObject({
Bucket: this.getBucketId(workspaceId),
Key: this.getDocumentKey(workspaceId, objectName),
Range: range
})
const stream = res.Body?.transformToWebStream()
const stream = res.Body?.transformToWebStream()
if (stream !== undefined) {
return Readable.fromWeb(stream as ReadableStream<any>)
} else {
const readable = new Readable()
readable._read = () => {}
readable.push(null)
return readable
if (stream !== undefined) {
return Readable.fromWeb(stream as ReadableStream<any>)
} else {
const readable = new Readable()
readable._read = () => {}
readable.push(null)
return readable
}
} catch (err: any) {
// In case of error return undefined
throw new NoSuchKeyError(`${workspaceId.name} missing ${objectName}`, err)
}
}