2025/10/21 10:11 Iroh-blobs 0.95 – New features – Iroh

やっほー、ロボ子! Iroh-blobs 0.95の新機能について話すのじゃ!

博士、こんにちは。Iroh-blobsの新機能、楽しみです! 今回はどんなアップデートがあるんですか?

今回の目玉は、Connection Pool (`util::connection_pool`) の導入じゃ! たくさんのエンドポイントと通信するときに、同時オープン接続数を制限できる優れものなのじゃ。

なるほど。Iroh接続は軽量とはいえ、大量の接続を同時に開くのは非効率ですもんね。ConnectionPoolを使うと、そのあたりのバランスが取れるんですね。

`get_or_connect`でプールから既存の接続を取得するか、新しい接続を作成して保存できるぞ。接続は構成可能な時間だけプールに保持され、アイドル状態の接続は必要に応じて閉じられるのじゃ。

接続の最大数や接続確立の最大許容時間、アイドル状態の接続を保持する最大時間も設定できるんですね。柔軟性が高いですね。

そうそう! 接続をユーザーに渡す前に、セットアップを実行することもできるのじゃ。例えば、直接接続でのみiroh-blobs転送を実行して、リレーの帯域幅使用量を削減したりできるぞ。

それは便利ですね! ところで、注意点として`ConnectionPool`は現在使用中の接続を追跡する必要があり、`Connection`ではなく`ConnectionRef`を返すとのことですが、これはどういうことですか?

`ConnectionRef`は`Connection`にデリファレンスされるけど、追加のライフタイム追跡が含まれているのじゃ。これを正しく使わないと、問題が発生する可能性があるから気をつけるのじゃ!

ライフタイム追跡ですか。了解しました。注意します。

それから、リクエストとレスポンスのストリームを抽象化する機能も追加されたのじゃ。iroh-blobsで圧縮を使えるようにするための要望に応えたものなのじゃ。

圧縮ですか! それはパフォーマンス向上に繋がりそうですね。具体的にはどのように実現しているんですか?

以前は、iroh-blobsが`iroh::endpoint::SendStream`と`iroh::endpoint::RecvStream`を直接使用していたから、ストリーム全体を圧縮することができなかったのじゃ。そこで、送信および受信ストリームを変換でラップできるようにtraitsを追加したのじゃ!

`Stream`と`Sink`に似たtraitsで、`Bytes`の送受信を許可し、ストリームを閉じるための`stop`と`reset`メソッド、リモート側がストリームを閉じたときに解決されるfutureを返す`stopped`メソッドがあるんですね。

その通り! デフォルトでは、iroh-blobsは引き続き`iroh::endpoint::SendStream`と`iroh::endpoint::RecvStream`を直接使用するから、通常の使用では何も変わらないのじゃ。

なるほど。既存のコードへの影響を最小限に抑えつつ、新しい機能を追加できるんですね。

さらに、プロバイダー側で何をしているか詳細なイベントを取得できるようになったのじゃ。プロバイダーイベントは`irpc`プロトコルとして実装されているのじゃ。

イベントマスクを使って、通知が必要かどうか、リクエストをインターセプトする必要があるかどうかを設定できるんですね。特定のハッシュのみを処理する場合などに便利そうですね。

そうじゃ! 今後の予定としては、個々のblobのマルチプロバイダーダウンロードの最小バージョンをリリースする予定なのじゃ。iroh 1.0がリリースされると、iroh-blobsのいくつかの一般的な部分が別のirohユーティリティクレートに移動するぞ。

今後のアップデートも楽しみです!

ところでロボ子、Connection Poolって、まるで温泉みたいじゃない? いろんな接続がゆったり浸かって、リラックスしてるのじゃ!

博士、それはちょっと違うと思います…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。