Rcutils: 指定されたディレクトリ(サブディレクトリを含む)のサイズを計算します

作成日 2020年10月27日  ·  13コメント  ·  ソース: ros2/rcutils

rcutils_calculate_directory_size()は、再帰なしでディレクトリのサイズの計算のみをサポートします。
rcutils_calculate_directory_size()が再帰をサポートしないのはなぜですか?
何か原因はありますか?

全てのコメント13件

何も考えていませんが、再帰的に動作すればいいと思います。

rcutils_calculate_directory_sizeは現在、 rosbag2メタデータの計算に使用されています。 ディレクトリ内のすべてのファイルなので、今のところ再帰的である必要はありません。

rcutils_calculate_directory_sizeは現在、rosbag2メタデータの計算に使用されています。 ディレクトリ内のすべてのファイルなので、今のところ再帰的である必要はありません。

はい。 これで、rosbag2のmetadata_io.cppだけがこの関数を呼び出します。

再帰検索をサポートしていないことを明示的に説明しています。 実際のユースケースで再帰的にする必要がありますか?

再帰検索をサポートしていないことを明示的に説明しています。 実際のユースケースで再帰的にする必要がありますか?

はい。 以下のrosbag2での現在の実装

https://github.com/ros2/rosbag2/blob/700817c42f1bbc26ced79aca2186094350c8d1be/rosbag2_storage/src/rosbag2_storage/metadata_io.cpp#L229 -L240

指定されたパスのファイルサイズの合計のみを計算します。 sqlite3データベース(現在、rosbag2はこれをストレージバックエンドとしてのみ提供します)の場合、sqlite3データベースは1つのファイルであるため、問題ありません。 ただし、他の場合(leveldbなど)は、ディレクトリを使用してデータを保存します。 上記のコードは、データベースの正しいサイズを取得できません。
再帰をサポートするようにこの関数を更新したいと思います。
この変更により、現在のコードに問題が発生することはありません。

再帰をサポートするようにこの関数を更新したいと思います。
この変更により、現在のコードに問題が発生することはありません。

ええ、それを行うためにそれを強化することに問題は見られません。 呼び出し元が本当にそれを望まない場合に備えて、関数にrecursiveブールパラメーターを導入したい場合がありますが、それ以外の場合は私には良いと思います。

@clalancette
CC:@ Barry-Xu-2018

コメントありがとうございます!
実際、私たちはleveldbをrosbag2バックエンドデータベースとして使用しようとしています。 これを行うには、この拡張機能が必要になります。

@clalancette @fujitatomoya

呼び出し元が本当にそれを望まない場合に備えて、関数に再帰的なブールパラメータを導入したい場合がありますが、それ以外の場合は、私には良いと思います。

新しいパラメータを追加する場合は、rcutilsを更新した後、同時にrosbag2を更新する必要があります。 それ以外の場合、rosbag2のビルドは失敗しました。

Linuxプラットフォームでテストしました。 ただし、ウィンドウプラットフォームでテストする必要があります。
現在、ウィンドウ環境を準備しています。

新しいパラメータを追加する場合は、rcutilsを更新した後、同時にrosbag2を更新する必要があります。 それ以外の場合、rosbag2のビルドは失敗しました。

私もこのアプローチを望んでいません。 インターフェイスを維持し、再帰的に検索する機能を強化できます。 再帰的でない検索の特定のユースケースがある場合は、再帰的なケースの新しい関数を追加できます。

私もこのアプローチを望んでいません。 インターフェイスを維持し、再帰的に検索する機能を強化できます。 再帰的でない検索の特定のユースケースがある場合は、再帰的なケースの新しい関数を追加できます。

うん。 同意。

@clalancette

新しいパラメータなしでrcutils_calculate_directory_sizeを拡張するのはどうですか?
現在、rosbag2は拡張されたrcutils_calculate_directory_size()で正しく動作できます。

新しいパラメータなしでrcutils_calculate_directory_sizeを拡張するのはどうですか?
現在、rosbag2は拡張されたrcutils_calculate_directory_size()で正しく動作できます。

私がこれを心配している理由は、rosbag2ディレクトリ内に「追加の」情報を保存することについてユーザーの間でいくつかの話があるからです。 サブディレクトリに大量の追加データを格納することになった場合、rosbag2が期待しているサイズを失う可能性があります。

APIを壊したくない場合は、 rcutils_calculate_directory_size_recursive()という別の関数を追加することもできます。

rcutils_calculate_directory_size()で常に再帰検索を実行すると、rosbag2で問題が発生するかどうかについての洞察を得るために、 @ Karsten1987にpingを実行します。

@clalancette

私はあなたの懸念を理解しています。
コードを確認しました。 この関数を使用するのは、rosbag2の以下のコードのみです。

https://github.com/ros2/rosbag2/blob/700817c42f1bbc26ced79aca2186094350c8d1be/rosbag2_storage/src/rosbag2_storage/metadata_io.cpp#L229 -L240

コードを変更した後、デフォルトのsqlite3ストレージプラグインを使用してrosbag2も試しましたが、問題は見つかりませんでした。
もちろん、@ Karsten1987の意見を聞く必要があります。

@ Barry-Xu-2018

私はあなたがこれを閉じることができると思います。

306が統合されました。 したがって、この問題を閉じます。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

windelbouwman picture windelbouwman  ·  7コメント

EricCousineau-TRI picture EricCousineau-TRI  ·  22コメント

behlendorf picture behlendorf  ·  12コメント

belov1985 picture belov1985  ·  7コメント

jonashaag picture jonashaag  ·  18コメント