diff options
| author | anatawa12 <anatawa12@icloud.com> | 2024-05-23 15:55:47 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-23 15:55:47 +0900 |
| commit | 83a9aa4533912c685a74a107be3894c4a85a338c (patch) | |
| tree | 7081d74a9e461470ac27252f480a10eec903a307 /packages/backend/src/queue | |
| parent | feat(backend): add /healthz endpoint (#13834) (diff) | |
| download | sharkey-83a9aa4533912c685a74a107be3894c4a85a338c.tar.gz sharkey-83a9aa4533912c685a74a107be3894c4a85a338c.tar.bz2 sharkey-83a9aa4533912c685a74a107be3894c4a85a338c.zip | |
feat: suspend instance improvements (#13861)
* feat(backend): dead instance detection
* feat(backend): suspend type detection
* feat(frontend): show suspend reason on frontend
* feat(backend): resume federation automatically if the server is automatically suspended
* docs(changelog): 配信停止まわりの改善
* lint: fix lint errors
* Update packages/frontend/src/pages/instance-info.vue
* lint: fix lint error
* chore: suspendedState => suspensionState
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/backend/src/queue')
| -rw-r--r-- | packages/backend/src/queue/processors/DeliverProcessorService.ts | 14 | ||||
| -rw-r--r-- | packages/backend/src/queue/processors/InboxProcessorService.ts | 2 |
2 files changed, 14 insertions, 2 deletions
diff --git a/packages/backend/src/queue/processors/DeliverProcessorService.ts b/packages/backend/src/queue/processors/DeliverProcessorService.ts index 5fed070929..b73195afc3 100644 --- a/packages/backend/src/queue/processors/DeliverProcessorService.ts +++ b/packages/backend/src/queue/processors/DeliverProcessorService.ts @@ -5,6 +5,7 @@ import { Inject, Injectable } from '@nestjs/common'; import * as Bull from 'bullmq'; +import { Not } from 'typeorm'; import { DI } from '@/di-symbols.js'; import type { InstancesRepository } from '@/models/_.js'; import type Logger from '@/logger.js'; @@ -62,7 +63,7 @@ export class DeliverProcessorService { if (suspendedHosts == null) { suspendedHosts = await this.instancesRepository.find({ where: { - isSuspended: true, + suspensionState: Not('none'), }, }); this.suspendedHostsCache.set(suspendedHosts); @@ -79,6 +80,7 @@ export class DeliverProcessorService { if (i.isNotResponding) { this.federatedInstanceService.update(i.id, { isNotResponding: false, + notRespondingSince: null, }); } @@ -98,7 +100,15 @@ export class DeliverProcessorService { if (!i.isNotResponding) { this.federatedInstanceService.update(i.id, { isNotResponding: true, + notRespondingSince: new Date(), }); + } else if (i.notRespondingSince) { + // 1週間以上不通ならサスペンド + if (i.suspensionState === 'none' && i.notRespondingSince.getTime() <= Date.now() - 1000 * 60 * 60 * 24 * 7) { + this.federatedInstanceService.update(i.id, { + suspensionState: 'autoSuspendedForNotResponding', + }); + } } this.apRequestChart.deliverFail(); @@ -116,7 +126,7 @@ export class DeliverProcessorService { if (job.data.isSharedInbox && res.statusCode === 410) { this.federatedInstanceService.fetch(host).then(i => { this.federatedInstanceService.update(i.id, { - isSuspended: true, + suspensionState: 'goneSuspended', }); }); throw new Bull.UnrecoverableError(`${host} is gone`); diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts index 1d05f4ade1..f465339075 100644 --- a/packages/backend/src/queue/processors/InboxProcessorService.ts +++ b/packages/backend/src/queue/processors/InboxProcessorService.ts @@ -188,6 +188,8 @@ export class InboxProcessorService { this.federatedInstanceService.update(i.id, { latestRequestReceivedAt: new Date(), isNotResponding: false, + // もしサーバーが死んでるために配信が止まっていた場合には自動的に復活させてあげる + suspensionState: i.suspensionState === 'autoSuspendedForNotResponding' ? 'none' : undefined, }); this.fetchInstanceMetadataService.fetchInstanceMetadata(i); |