FTTが有効かつsinceIdのみを指定した場合に帰って来るレスポンスが逆順である問題を修正 (#13837)
* fix: FTTが有効かつsinceIdのみを指定した場合に帰って来るレスポンスが逆順である問題 * docs(changelog): FTTが有効かつsinceIdのみを指定した場合に帰って来るレスポンスが逆順である問題を修正
This commit is contained in:
parent
ba62b7378b
commit
acf84a2516
2 changed files with 6 additions and 8 deletions
|
@ -80,6 +80,7 @@
|
||||||
- Fix: グローバルタイムラインで返信が表示されないことがある問題を修正
|
- Fix: グローバルタイムラインで返信が表示されないことがある問題を修正
|
||||||
- Fix: リノートをミュートしたユーザの投稿のリノートがミュートされる問題を修正
|
- Fix: リノートをミュートしたユーザの投稿のリノートがミュートされる問題を修正
|
||||||
- Fix: AP Link等は添付ファイル扱いしないようになど (#13754)
|
- Fix: AP Link等は添付ファイル扱いしないようになど (#13754)
|
||||||
|
- Fix: FTTが有効かつsinceIdのみを指定した場合に帰って来るレスポンスが逆順である問題を修正
|
||||||
|
|
||||||
## 2024.3.1
|
## 2024.3.1
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,8 @@ export class FanoutTimelineEndpointService {
|
||||||
// 呼び出し元と以下の処理をシンプルにするためにdbFallbackを置き換える
|
// 呼び出し元と以下の処理をシンプルにするためにdbFallbackを置き換える
|
||||||
if (!ps.useDbFallback) ps.dbFallback = () => Promise.resolve([]);
|
if (!ps.useDbFallback) ps.dbFallback = () => Promise.resolve([]);
|
||||||
|
|
||||||
const shouldPrepend = ps.sinceId && !ps.untilId;
|
const ascending = ps.sinceId && !ps.untilId;
|
||||||
const idCompare: (a: string, b: string) => number = shouldPrepend ? (a, b) => a < b ? -1 : 1 : (a, b) => a > b ? -1 : 1;
|
const idCompare: (a: string, b: string) => number = ascending ? (a, b) => a < b ? -1 : 1 : (a, b) => a > b ? -1 : 1;
|
||||||
|
|
||||||
const redisResult = await this.fanoutTimelineService.getMulti(ps.redisTimelines, ps.untilId, ps.sinceId);
|
const redisResult = await this.fanoutTimelineService.getMulti(ps.redisTimelines, ps.untilId, ps.sinceId);
|
||||||
|
|
||||||
|
@ -142,9 +142,7 @@ export class FanoutTimelineEndpointService {
|
||||||
|
|
||||||
if (ps.allowPartial ? redisTimeline.length !== 0 : redisTimeline.length >= ps.limit) {
|
if (ps.allowPartial ? redisTimeline.length !== 0 : redisTimeline.length >= ps.limit) {
|
||||||
// 十分Redisからとれた
|
// 十分Redisからとれた
|
||||||
const result = redisTimeline.slice(0, ps.limit);
|
return redisTimeline.slice(0, ps.limit);
|
||||||
if (shouldPrepend) result.reverse();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,8 +150,7 @@ export class FanoutTimelineEndpointService {
|
||||||
const remainingToRead = ps.limit - redisTimeline.length;
|
const remainingToRead = ps.limit - redisTimeline.length;
|
||||||
let dbUntil: string | null;
|
let dbUntil: string | null;
|
||||||
let dbSince: string | null;
|
let dbSince: string | null;
|
||||||
if (shouldPrepend) {
|
if (ascending) {
|
||||||
redisTimeline.reverse();
|
|
||||||
dbUntil = ps.untilId;
|
dbUntil = ps.untilId;
|
||||||
dbSince = noteIds[noteIds.length - 1];
|
dbSince = noteIds[noteIds.length - 1];
|
||||||
} else {
|
} else {
|
||||||
|
@ -161,7 +158,7 @@ export class FanoutTimelineEndpointService {
|
||||||
dbSince = ps.sinceId;
|
dbSince = ps.sinceId;
|
||||||
}
|
}
|
||||||
const gotFromDb = await ps.dbFallback(dbUntil, dbSince, remainingToRead);
|
const gotFromDb = await ps.dbFallback(dbUntil, dbSince, remainingToRead);
|
||||||
return shouldPrepend ? [...gotFromDb, ...redisTimeline] : [...redisTimeline, ...gotFromDb];
|
return [...redisTimeline, ...gotFromDb];
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ps.dbFallback(ps.untilId, ps.sinceId, ps.limit);
|
return await ps.dbFallback(ps.untilId, ps.sinceId, ps.limit);
|
||||||
|
|
Loading…
Reference in a new issue