Rcutils: Hitung ukuran direktori yang ditentukan (termasuk subdirektori)

Dibuat pada 27 Okt 2020  ·  13Komentar  ·  Sumber: ros2/rcutils

rcutils_calculate_directory_size() hanya mendukung penghitungan ukuran direktori tanpa rekursif.
Mengapa rcutils_calculate_directory_size() tidak mendukung rekursif?
Apakah ada penyebabnya?

Semua 13 komentar

Saya tidak memikirkan apa pun tetapi saya percaya akan lebih baik jika itu bekerja secara rekursif.

rcutils_calculate_directory_size saat ini digunakan untuk menghitung metadata rosbag2 . karena semua file dalam direktori, tidak harus rekursif untuk saat ini.

rcutils_calculate_directory_size saat ini digunakan untuk menghitung metadata rosbag2. karena semua file dalam direktori, tidak harus rekursif untuk saat ini.

Ya. Sekarang hanya metadata_io.cpp di rosbag2 yang memanggil fungsi ini.

itu secara eksplisit menjelaskan bahwa itu tidak mendukung pencarian rekursif. apakah kita membutuhkannya untuk menjadi rekursif dengan kasus penggunaan yang sebenarnya?

itu secara eksplisit menjelaskan bahwa itu tidak mendukung pencarian rekursif. apakah kita membutuhkannya untuk menjadi rekursif dengan kasus penggunaan yang sebenarnya?

Ya. Implementasi saat ini di rosbag2 seperti di bawah ini

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

Itu hanya menghitung total ukuran file di jalur yang ditentukan. Untuk database sqlite3 (Sekarang rosbag2 hanya menyediakan ini sebagai back-end penyimpanan), tidak apa-apa karena database sqlite3 adalah satu file. Tetapi untuk yang lain (seperti leveldb), itu menggunakan direktori untuk menyimpan data. Kode di atas tidak bisa mendapatkan ukuran database yang benar.
Saya ingin memperbarui fungsi ini untuk mendukung rekursif.
Modifikasi ini seharusnya tidak menimbulkan masalah untuk kode saat ini.

Saya ingin memperbarui fungsi ini untuk mendukung rekursif.
Modifikasi ini seharusnya tidak menimbulkan masalah untuk kode saat ini.

Ya, saya tidak melihat masalah dengan meningkatkannya untuk melakukan itu. Kami mungkin ingin memperkenalkan parameter boolean recursive ke fungsi jika pemanggil benar-benar tidak menginginkannya, tetapi sebaliknya kedengarannya bagus untuk saya.

@clalancette
CC: @Barry-Xu-2018

terima kasih atas komentarnya!
sebenarnya kami telah mencoba menggunakan leveldb sebagai database backend rosbag2. peningkatan ini akan diperlukan untuk melakukan itu.

@clalancette @fujitatomoya

Kami mungkin ingin memperkenalkan parameter boolean rekursif ke fungsi jika pemanggil benar-benar tidak menginginkannya, tetapi selain itu kedengarannya bagus untuk saya.

Jika menambahkan parameter baru, setelah rcutils diperbarui, kita harus memperbarui rosbag2 secara bersamaan. Jika tidak, pembuatan rosbag2 gagal.

Saya telah menguji pada platform Linux. Tapi itu perlu diuji pada platform jendela.
Sekarang saya sedang mempersiapkan lingkungan jendela.

Jika menambahkan parameter baru, setelah rcutils diperbarui, kita harus memperbarui rosbag2 secara bersamaan. Jika tidak, pembuatan rosbag2 gagal.

saya juga tidak akan menyukai pendekatan ini. kita dapat menjaga antarmuka dan meningkatkan fungsionalitas untuk mencari secara rekursif. jika ada kasus penggunaan khusus untuk pencarian tidak rekursif, kami dapat menambahkan fungsi baru untuk kasus rekursif.

saya juga tidak akan menyukai pendekatan ini. kita dapat menjaga antarmuka dan meningkatkan fungsionalitas untuk mencari secara rekursif. jika ada kasus penggunaan khusus untuk pencarian tidak rekursif, kami dapat menambahkan fungsi baru untuk kasus rekursif.

Ya. Setuju.

@clalancette

Bagaimana kalau kita meningkatkan rcutils_calculate_directory_size tanpa parameter baru?
Saat ini, rosbag2 dapat bekerja dengan benar dengan rcutils_calculate_directory_size() yang disempurnakan.

Bagaimana kalau kita meningkatkan rcutils_calculate_directory_size tanpa parameter baru?
Saat ini, rosbag2 dapat bekerja dengan benar dengan rcutils_calculate_directory_size() yang disempurnakan.

Alasan saya mengkhawatirkan hal ini adalah karena ada pembicaraan di antara pengguna tentang penyimpanan informasi "tambahan" di dalam direktori rosbag2. Jika mereka akhirnya menyimpan banyak data tambahan di subdirektori, itu bisa membuang ukuran yang diharapkan rosbag2.

Jika kita tidak ingin merusak API, kita juga bisa menambahkan fungsi lain yaitu rcutils_calculate_directory_size_recursive() .

ping ke @Karsten1987 untuk mengetahui apakah selalu melakukan pencarian rekursif di rcutils_calculate_directory_size() akan menyebabkan masalah untuk rosbag2.

@clalancette

Saya memahami kekhawatiran Anda.
Saya telah memeriksa kode. Hanya kode di bawah di rosbag2 yang menggunakan fungsi ini.

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

Setelah mengubah kode, saya juga mencoba rosbag2 dengan plugin penyimpanan sqlite3 default dan tidak menemukan masalah.
Tentu saja, kita harus mendengar pendapat @Karsten1987.

@Barry-Xu-2018

Saya kira Anda bisa menutup yang ini.

306 digabungkan. Jadi tutup masalah ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat