Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ファイルはオブジェクトストレージにアップロードできません。 #15242

Closed
1 task
matrixk opened this issue Jan 9, 2025 · 9 comments
Closed
1 task
Labels
⚠️bug? This might be a bug

Comments

@matrixk
Copy link

matrixk commented Jan 9, 2025

💡 Summary

Misskeyがバージョン2024.11.0にアップデートされた後、ファイルのアップロードは成功したと表示されますが、実際にはファイルが対応するオブジェクトストレージにアップロードされておらず、そのため画像が表示されない問題が発生しています。

🥰 Expected Behavior

ファイルはオブジェクトストレージにアップロードされ、正しいアドレスが解析されることで、画像が正常に表示されます。

🤬 Actual Behavior

ファイルはオブジェクトストレージにアップロードされていませんが、Misskeyはエラーメッセージを返さず、投稿後に画像が表示されない問題が発生しています。
Image

📝 Steps to Reproduce

  1. オブジェクトストレージの設定を確認し、アクセス権限が正しく設定されていることを確認しました(Misskeyのバージョンを更新する前は、同じ設定で問題は発生していませんでした)
  2. オブジェクトストレージの残り容量を確認し、引き続き十分な空き容量があることを確認しました。
  3. アップロードファイル時のリクエスト結果を確認し、結果は「OK」でした。
    Image
    (その後の確認により、ここでエラーが発生しているはずです。エラーメッセージが返されることを期待しています)
    しかし、画像のリクエストが失敗し、エラーコード404が返されました。
    Image
  4. オブジェクトストレージのログを確認しましたが、アップロード記録はなく、オブジェクトストレージがファイルを受信していないことが確認されました。

💻 Frontend Environment

* Model and OS of the device(s):自作PC
* Browser:Chrome 131.0.6778.205
* Server URL:
* Misskey:2024.11.0

🛰 Backend Environment (for server admin)

* Installation Method or Hosting Service:
* Misskey:
* Node:
* PostgreSQL:
* Redis:
* OS and Architecture:

Do you want to address this bug yourself?

  • Yes, I will patch the bug myself and send a pull request
@kakkokari-gtyih
Copy link
Contributor

kakkokari-gtyih commented Jan 9, 2025

オブジェクトストレージはAWS等の外部のものを使用していますか?それともセルフホスティングのものでしょうか。

セルフホスティングの場合は #15038 です

@matrixk
Copy link
Author

matrixk commented Jan 9, 2025

オブジェクトストレージはAWS等の外部のものを使用していますか?それともセルフホスティングのものでしょうか。

セルフホスティングの場合は #15038 です

セルフホスティングのものではありません,Amazon S3 Compatibleの外部のものを使用しています

@samunohito
Copy link
Member

(軽くソースを見ただけなので、あくまで参考情報として…)

アップロードファイル時のリクエスト結果を確認し、結果は「OK」でした。

.catch(
err => {
this.registerLogger.error(`Upload Failed: key = ${key}, filename = ${filename}`, err);
},
);

上記でcatchしたものをthrowしていないので、promiseが正常終了扱いされている可能性がありますね…
(もし仮にこの件がMisskey責でなかったとしても、throwされるようにした方が良いかと考えます)

@matrixk
サーバの実行ログにUpload Failed: key で始まっているエラーログが出力されていたりしませんでしょうか?

@matrixk
Copy link
Author

matrixk commented Jan 9, 2025

(軽くソースを見ただけなので、あくまで参考情報として…)

アップロードファイル時のリクエスト結果を確認し、結果は「OK」でした。

misskey/packages/backend/src/core/DriveService.ts

Lines 403 to 407 in 023fa30

.catch(
err => {
this.registerLogger.error(Upload Failed: key = ${key}, filename = ${filename}, err);
},
);
上記でcatchしたものをthrowしていないので、promiseが正常終了扱いされている可能性がありますね… (もし仮にこの件がMisskey責でなかったとしても、throwされるようにした方が良いかと考えます)

@matrixk サーバの実行ログにUpload Failed: key で始まっているエラーログが出力されていたりしませんでしょうか?

Image

@samunohito サーバーログでUpload Failed: key で始まっているログを見つけました、どのように解決すればよいでしょうか?

@samunohito
Copy link
Member

ありがとうございます。

const address = socket.remoteAddress;
if (process.env.NODE_ENV === 'production') {
if (address && ipaddr.isValid(address)) {
if (this.isPrivateIp(address)) {
socket.destroy(new Error(`Blocked address: ${address}`));
}
}
}

Blocked address: でソースを検索すると、上記の個所がヒットしました。
接続先がプライベートIPであった場合に発生するパターンのようですが…うーむ

@matrixk
Copy link
Author

matrixk commented Jan 9, 2025

ありがとうございます。

misskey/packages/backend/src/core/HttpRequestService.ts

Lines 86 to 93 in 3a6c2aa

const address = socket.remoteAddress;
if (process.env.NODE_ENV === 'production') {
if (address && ipaddr.isValid(address)) {
if (this.isPrivateIp(address)) {
socket.destroy(new Error(Blocked address: ${address}));
}
}
}

Blocked address: でソースを検索すると、上記の個所がヒットしました。
接続先がプライベートIPであった場合に発生するパターンのようですが…うーむ

@samunohito
プライベートIPの問題ではないと思います。以前、同じオブジェクトストレージにアップロードした画像を確認したところ、バージョン更新前に正常にアップロードされた画像は依然として問題なく表示されていました
Image
Image
オブジェクトストレージの設定は、バージョン更新前後で変更されていません。もしIPアクセスの問題が原因であれば、以前アップロードしたファイルは読み取れなくなっているはず……と思います😢

@samunohito
Copy link
Member

メモ:もしかしたら関係あるかも → #15040

@anatawa12
Copy link
Member

anatawa12 commented Jan 9, 2025

ダウンロードとアップロードでは別のロジック等が使用されており、ブロック機能実装時に問題が発生しないようにしたため、ダウンロードに関してはローカルipでも通るようになっています。 ダウンロードの時には公開urlが使用されるため問題が発生しません。

ダウンロードについてはobjectStorageBaseUrlを経由するためローカル扱いになることは少ないです。

たいして、アップロード機能については私が見落としたため後に修正を #15038 で入れた形です。

よってこの問題は #15038 だと思います

@samunohito
Copy link
Member

#15038 は11月末にマージされていますね。
なので、2024.11.0の次のバージョンで修正されたものがリリースされるかと思います。

もし改善を急がれる場合、developの最新コミットに追従するか、 dd56623 をチェリーピックして頂ければと・・・

@github-project-automation github-project-automation bot moved this from Todo to Done in [実験中] 管理用 Jan 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⚠️bug? This might be a bug
Projects
Development

No branches or pull requests

4 participants