Skip to content

Commit d64feb7

Browse files
committed
Revert "fix: 古いキャッシュを使うのを修正 (misskey-dev#13453)"
This reverts commit 2c6f25b.
1 parent 950e869 commit d64feb7

File tree

8 files changed

+27
-27
lines changed

8 files changed

+27
-27
lines changed

packages/backend/src/core/AccountMoveService.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
2020
import { ApDeliverManagerService } from '@/core/activitypub/ApDeliverManagerService.js';
2121
import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
2222
import { UserEntityService } from '@/core/entities/UserEntityService.js';
23+
import { CacheService } from '@/core/CacheService.js';
2324
import { ProxyAccountService } from '@/core/ProxyAccountService.js';
2425
import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
2526
import { MetaService } from '@/core/MetaService.js';
@@ -59,6 +60,7 @@ export class AccountMoveService {
5960
private instanceChart: InstanceChart,
6061
private metaService: MetaService,
6162
private relayService: RelayService,
63+
private cacheService: CacheService,
6264
private queueService: QueueService,
6365
) {
6466
}
@@ -82,7 +84,7 @@ export class AccountMoveService {
8284
Object.assign(src, update);
8385

8486
// Update cache
85-
this.globalEventService.publishInternalEvent('localUserUpdated', src);
87+
this.cacheService.uriPersonCache.set(srcUri, src);
8688

8789
const srcPerson = await this.apRendererService.renderPerson(src);
8890
const updateAct = this.apRendererService.addContext(this.apRendererService.renderUpdate(srcPerson, src));

packages/backend/src/core/CacheService.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,10 @@ export class CacheService implements OnApplicationShutdown {
129129
switch (type) {
130130
case 'userChangeSuspendedState':
131131
case 'userChangeDeletedState':
132-
case 'remoteUserUpdated':
133-
case 'localUserUpdated': {
132+
case 'remoteUserUpdated': {
134133
const user = await this.usersRepository.findOneBy({ id: body.id });
135134
if (user == null) {
136135
this.userByIdCache.delete(body.id);
137-
this.localUserByIdCache.delete(body.id);
138136
for (const [k, v] of this.uriPersonCache.cache.entries()) {
139137
if (v.value?.id === body.id) {
140138
this.uriPersonCache.delete(k);

packages/backend/src/core/GlobalEventService.ts

-1
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,6 @@ export interface InternalEventTypes {
215215
userChangeDeletedState: { id: MiUser['id']; isDeleted: MiUser['isDeleted']; };
216216
userTokenRegenerated: { id: MiUser['id']; oldToken: string; newToken: string; };
217217
remoteUserUpdated: { id: MiUser['id']; };
218-
localUserUpdated: { id: MiUser['id']; };
219218
follow: { followerId: MiUser['id']; followeeId: MiUser['id']; };
220219
unfollow: { followerId: MiUser['id']; followeeId: MiUser['id']; };
221220
blockingCreated: { blockerId: MiUser['id']; blockeeId: MiUser['id']; };

packages/backend/src/core/UserFollowingService.ts

+18-9
Original file line numberDiff line numberDiff line change
@@ -101,24 +101,33 @@ export class UserFollowingService implements OnModuleInit {
101101
this.queueService.deliver(followee, content, follower.inbox, false);
102102
}
103103

104+
/**
105+
* ThinUserでなくともユーザーの情報が最新でない場合はこちらを使うべき
106+
*/
104107
@bindThis
105-
public async follow(
108+
public async followByThinUser(
106109
_follower: ThinUser,
107110
_followee: ThinUser,
111+
options: Parameters<typeof this.follow>[2] = {},
112+
) {
113+
const [follower, followee] = await Promise.all([
114+
this.usersRepository.findOneByOrFail({ id: _follower.id }),
115+
this.usersRepository.findOneByOrFail({ id: _followee.id }),
116+
]) as [MiLocalUser | MiRemoteUser, MiLocalUser | MiRemoteUser];
117+
118+
await this.follow(follower, followee, options);
119+
}
120+
121+
@bindThis
122+
public async follow(
123+
follower: MiLocalUser | MiRemoteUser,
124+
followee: MiLocalUser | MiRemoteUser,
108125
{ requestId, silent = false, withReplies }: {
109126
requestId?: string,
110127
silent?: boolean,
111128
withReplies?: boolean,
112129
} = {},
113130
): Promise<void> {
114-
/**
115-
* 必ず最新のユーザー情報を取得する
116-
*/
117-
const [follower, followee] = await Promise.all([
118-
this.usersRepository.findOneByOrFail({ id: _follower.id }),
119-
this.usersRepository.findOneByOrFail({ id: _followee.id }),
120-
]) as [MiLocalUser | MiRemoteUser, MiLocalUser | MiRemoteUser];
121-
122131
if (this.userEntityService.isRemoteUser(follower) && this.userEntityService.isRemoteUser(followee)) {
123132
// What?
124133
throw new Error('Remote user cannot follow remote user.');

packages/backend/src/misc/cache.ts

-8
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,6 @@ export class RedisSingleCache<T> {
189189
// TODO: メモリ節約のためあまり参照されないキーを定期的に削除できるようにする?
190190

191191
export class MemoryKVCache<T> {
192-
/**
193-
* データを持つマップ
194-
* @deprecated これを直接操作するべきではない
195-
*/
196192
public cache: Map<string, { date: number; value: T; }>;
197193
private lifetime: number;
198194
private gcIntervalHandle: NodeJS.Timeout;
@@ -207,10 +203,6 @@ export class MemoryKVCache<T> {
207203
}
208204

209205
@bindThis
210-
/**
211-
* Mapにキャッシュをセットします
212-
* @deprecated これを直接呼び出すべきではない。InternalEventなどで変更を全てのプロセス/マシンに通知するべき
213-
*/
214206
public set(key: string, value: T): void {
215207
this.cache.set(key, {
216208
date: Date.now(),

packages/backend/src/queue/processors/RelationshipProcessorService.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export class RelationshipProcessorService {
3535
@bindThis
3636
public async processFollow(job: Bull.Job<RelationshipJobData>): Promise<string> {
3737
this.logger.info(`${job.data.from.id} is trying to follow ${job.data.to.id} ${job.data.withReplies ? "with replies" : "without replies"}`);
38-
await this.userFollowingService.follow(job.data.from, job.data.to, {
38+
await this.userFollowingService.followByThinUser(job.data.from, job.data.to, {
3939
requestId: job.data.requestId,
4040
silent: job.data.silent,
4141
withReplies: job.data.withReplies,

packages/backend/src/server/api/endpoints/following/create.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const paramDef = {
7171
type: 'object',
7272
properties: {
7373
userId: { type: 'string', format: 'misskey:id' },
74-
withReplies: { type: 'boolean' },
74+
withReplies: { type: 'boolean' }
7575
},
7676
required: ['userId'],
7777
} as const;

packages/backend/src/server/api/endpoints/i/update.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -461,9 +461,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
461461
this.hashtagService.updateUsertags(user, tags);
462462
//#endregion
463463

464-
if (Object.keys(updates).length > 0) {
465-
await this.usersRepository.update(user.id, updates);
466-
this.globalEventService.publishInternalEvent('localUserUpdated', { id: user.id });
464+
if (Object.keys(updates).length > 0) await this.usersRepository.update(user.id, updates);
465+
if (Object.keys(updates).includes('alsoKnownAs')) {
466+
this.cacheService.uriPersonCache.set(this.userEntityService.genLocalUserUri(user.id), { ...user, ...updates });
467467
}
468468

469469
await this.userProfilesRepository.update(user.id, {

0 commit comments

Comments
 (0)