1
0
Fork 0

More robust actor image lazy load

This commit is contained in:
Chocobozzz 2021-06-14 16:14:45 +02:00
parent a9fbc2aaa1
commit 79db409a41
No known key found for this signature in database
GPG key ID: 583A612D890159BE
2 changed files with 22 additions and 2 deletions

View file

@ -48,7 +48,7 @@ export {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
async function getActorImage (req: express.Request, res: express.Response) { async function getActorImage (req: express.Request, res: express.Response, next: express.NextFunction) {
const filename = req.params.filename const filename = req.params.filename
if (actorImagePathUnsafeCache.has(filename)) { if (actorImagePathUnsafeCache.has(filename)) {
@ -78,7 +78,23 @@ async function getActorImage (req: express.Request, res: express.Response) {
const path = image.getPath() const path = image.getPath()
actorImagePathUnsafeCache.set(filename, path) actorImagePathUnsafeCache.set(filename, path)
return res.sendFile(path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER })
return res.sendFile(path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER }, (err: any) => {
if (!err) return
// It seems this actor image is not on the disk anymore
if (err.status === HttpStatusCode.NOT_FOUND_404 && !image.isOwned()) {
logger.error('Cannot lazy serve actor image %s.', filename, { err })
actorImagePathUnsafeCache.del(filename)
image.onDisk = false
image.save()
.catch(err => logger.error('Cannot save new actor image disk state.', { err }))
}
return next(err)
})
} }
async function getPreview (req: express.Request, res: express.Response) { async function getPreview (req: express.Request, res: express.Response) {

View file

@ -98,4 +98,8 @@ export class ActorImageModel extends Model<Partial<AttributesOnly<ActorImageMode
const imagePath = join(CONFIG.STORAGE.ACTOR_IMAGES, this.filename) const imagePath = join(CONFIG.STORAGE.ACTOR_IMAGES, this.filename)
return remove(imagePath) return remove(imagePath)
} }
isOwned () {
return !this.fileUrl
}
} }