diff --git a/bgs.md b/bgs.md index 37d0d65..f0c2680 100644 --- a/bgs.md +++ b/bgs.md @@ -49,4 +49,32 @@ $ curl -X POST "https://bgs.${PDS_HOST}/admin/repo/reset?did=${did}" \ ```sh $ curl -X POST "http://bgs.${PDS_HOST}/admin/pds/resync?host=${PDS_HOST}" \ -H 'Authorization: Bearer '" -``` \ No newline at end of file +``` + +## TLに投稿が表示されない場合 + +### 原因 + +bskyサービスがBGSのFirehoseを購読する際、BGSが`since: ""`(空文字列)を送信することがある。atprotoのバリデーションは`since`が`null`または有効なTID形式を要求するため、空文字列で`FirehoseValidationError`が発生し、bskyの`RepoSubscription`が停止する。 + +```sh +PDS → BGS (Firehose) → bsky (RepoSubscription) → bsky DB → TL表示 +``` + +`RepoSubscription`が停止すると、BGSからbskyへデータが流れなくなり、TLに投稿が表示されなくなる。 + +### 恒久的な修正 + +`210-bgs-since-empty-fix.patch`を適用してBGSを再ビルド。このパッチは`indexer/indexer.go`で空文字列の`since`を`null`に正規化する。 + +### 一時的な回避策 + +パッチを適用できない場合、bskyのsubscriptionテーブルにカーソルを挿入して問題のあるseq=1をスキップする: + +```bash +# bskyデータベースに接続してカーソルを設定 +$ docker compose exec database psql -U postgres -d bsky -c \"INSERT INTO subscription (service, method, state) VALUES ('wss://bgs.syu.is', 'subscribeRepos', 2) ON CONFLICT (service, method) DO UPDATE SET state = 2;\"" + +# bsky再起動 +$ docker compose restart bsky +```