Skip to content
Snippets Groups Projects
Unverified Commit e4a686b4 authored by Chocobozzz's avatar Chocobozzz
Browse files

Cache some SQL queries

parent f27a885a
No related branches found
No related tags found
No related merge requests found
......@@ -27,7 +27,7 @@ import { VideoCommentModel } from '../video/video-comment'
import { UserModel } from './user'
import { AvatarModel } from '../avatar/avatar'
import { VideoPlaylistModel } from '../video/video-playlist'
import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants'
import { CONSTRAINTS_FIELDS, SERVER_ACTOR_NAME, WEBSERVER } from '../../initializers/constants'
import { FindOptions, IncludeOptions, Op, Transaction, WhereOptions } from 'sequelize'
import { AccountBlocklistModel } from './account-blocklist'
import { ServerBlocklistModel } from '../server/server-blocklist'
......@@ -218,6 +218,8 @@ export class AccountModel extends Model<AccountModel> {
})
BlockedAccounts: AccountBlocklistModel[]
private static cache: { [ id: string ]: any } = {}
@BeforeDestroy
static async sendDeleteIfOwned (instance: AccountModel, options) {
if (!instance.Actor) {
......@@ -245,6 +247,11 @@ export class AccountModel extends Model<AccountModel> {
}
static loadLocalByName (name: string): Bluebird<MAccountDefault> {
// The server actor never change, so we can easily cache it
if (name === SERVER_ACTOR_NAME && AccountModel.cache[name]) {
return Bluebird.resolve(AccountModel.cache[name])
}
const query = {
where: {
[ Op.or ]: [
......@@ -272,6 +279,13 @@ export class AccountModel extends Model<AccountModel> {
}
return AccountModel.findOne(query)
.then(account => {
if (name === SERVER_ACTOR_NAME) {
AccountModel.cache[name] = account
}
return account
})
}
static loadByNameAndHost (name: string, host: string): Bluebird<MAccountDefault> {
......
......@@ -27,7 +27,7 @@ import {
isActorPublicKeyValid
} from '../../helpers/custom-validators/activitypub/actor'
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc'
import { ACTIVITY_PUB, ACTIVITY_PUB_ACTOR_TYPES, CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants'
import { ACTIVITY_PUB, ACTIVITY_PUB_ACTOR_TYPES, CONSTRAINTS_FIELDS, SERVER_ACTOR_NAME, WEBSERVER } from '../../initializers/constants'
import { AccountModel } from '../account/account'
import { AvatarModel } from '../avatar/avatar'
import { ServerModel } from '../server/server'
......@@ -276,6 +276,8 @@ export class ActorModel extends Model<ActorModel> {
})
VideoChannel: VideoChannelModel
private static cache: { [ id: string ]: any } = {}
static load (id: number): Bluebird<MActor> {
return ActorModel.unscoped().findByPk(id)
}
......@@ -342,6 +344,11 @@ export class ActorModel extends Model<ActorModel> {
}
static loadLocalByName (preferredUsername: string, transaction?: Transaction): Bluebird<MActorFull> {
// The server actor never change, so we can easily cache it
if (preferredUsername === SERVER_ACTOR_NAME && ActorModel.cache[preferredUsername]) {
return Bluebird.resolve(ActorModel.cache[preferredUsername])
}
const query = {
where: {
preferredUsername,
......@@ -350,7 +357,15 @@ export class ActorModel extends Model<ActorModel> {
transaction
}
return ActorModel.scope(ScopeNames.FULL).findOne(query)
return ActorModel.scope(ScopeNames.FULL)
.findOne(query)
.then(actor => {
if (preferredUsername === SERVER_ACTOR_NAME) {
ActorModel.cache[ preferredUsername ] = actor
}
return actor
})
}
static loadByNameAndHost (preferredUsername: string, host: string): Bluebird<MActorFull> {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment