Chat Federation: some data caching to reduce disk load.
This commit is contained in:
parent
333590defd
commit
732138e745
@ -17,6 +17,8 @@ If a file exists, it means the video has a chat.
|
|||||||
The file itself contains the JSON LiveChatInfos object.
|
The file itself contains the JSON LiveChatInfos object.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const cache: Map<string, LiveChatJSONLDAttribute> = new Map<string, LiveChatJSONLDAttribute>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function stores remote LiveChat infos that are contained in ActivityPub objects.
|
* This function stores remote LiveChat infos that are contained in ActivityPub objects.
|
||||||
* We store these data for remotes videos.
|
* We store these data for remotes videos.
|
||||||
@ -36,6 +38,8 @@ async function storeVideoLiveChatInfos (
|
|||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const logger = options.peertubeHelpers.logger
|
const logger = options.peertubeHelpers.logger
|
||||||
|
|
||||||
|
cache.delete(video.url)
|
||||||
|
|
||||||
const remote = video.remote
|
const remote = video.remote
|
||||||
const filePath = await _getFilePath(options, remote, video.uuid, video.url)
|
const filePath = await _getFilePath(options, remote, video.uuid, video.url)
|
||||||
if (!filePath) {
|
if (!filePath) {
|
||||||
@ -48,11 +52,15 @@ async function storeVideoLiveChatInfos (
|
|||||||
if (!liveChatInfos) {
|
if (!liveChatInfos) {
|
||||||
logger.debug(`${remote ? 'Remote' : 'Local'} video ${video.uuid} has no chat infos, removing if necessary`)
|
logger.debug(`${remote ? 'Remote' : 'Local'} video ${video.uuid} has no chat infos, removing if necessary`)
|
||||||
await _del(options, filePath)
|
await _del(options, filePath)
|
||||||
|
// Delete the cache again, just in case.
|
||||||
|
cache.delete(video.url)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.debug(`${remote ? 'Remote' : 'Local'} video ${video.uuid} has chat infos to store`)
|
logger.debug(`${remote ? 'Remote' : 'Local'} video ${video.uuid} has chat infos to store`)
|
||||||
await _store(options, filePath, liveChatInfos)
|
await _store(options, filePath, liveChatInfos)
|
||||||
|
// Delete the cache again... in case a read failed because we were writing at the same time.
|
||||||
|
cache.delete(video.url)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -66,17 +74,27 @@ async function getVideoLiveChatInfos (
|
|||||||
video: MVideoFullLight | MVideoAP | Video | MVideoThumbnail
|
video: MVideoFullLight | MVideoAP | Video | MVideoThumbnail
|
||||||
): Promise<LiveChatJSONLDAttribute> {
|
): Promise<LiveChatJSONLDAttribute> {
|
||||||
const logger = options.peertubeHelpers.logger
|
const logger = options.peertubeHelpers.logger
|
||||||
|
|
||||||
|
const cached = cache.get(video.url)
|
||||||
|
if (cached !== undefined) { return cached }
|
||||||
|
|
||||||
const remote = ('remote' in video) ? video.remote : !video.isLocal
|
const remote = ('remote' in video) ? video.remote : !video.isLocal
|
||||||
const filePath = await _getFilePath(options, remote, video.uuid, video.url)
|
const filePath = await _getFilePath(options, remote, video.uuid, video.url)
|
||||||
if (!filePath) {
|
if (!filePath) {
|
||||||
logger.error('Cant compute the file path for storing liveChat infos for video ' + video.uuid)
|
logger.error('Cant compute the file path for storing liveChat infos for video ' + video.uuid)
|
||||||
|
cache.set(video.url, false)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = await _get(options, filePath)
|
const content = await _get(options, filePath)
|
||||||
if (content === null) { return false }
|
if (content === null) {
|
||||||
|
cache.set(video.url, false)
|
||||||
|
return false
|
||||||
|
}
|
||||||
// We must sanitize here, in case a previous plugin version did not sanitize enougth.
|
// We must sanitize here, in case a previous plugin version did not sanitize enougth.
|
||||||
return sanitizePeertubeLiveChatInfos(content)
|
const r = sanitizePeertubeLiveChatInfos(content)
|
||||||
|
cache.set(video.url, r)
|
||||||
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
async function _getFilePath (
|
async function _getFilePath (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user