Rcutils: Рассчитать размер указанного каталога (включая подкаталог)

Созданный на 27 окт. 2020  ·  13Комментарии  ·  Источник: ros2/rcutils

rcutils_calculate_directory_size() поддерживает только вычисление размера каталога без рекурсии.
Почему rcutils_calculate_directory_size() не поддерживает рекурсию?
Есть ли причина?

Все 13 Комментарий

Я ничего не думаю, но я считаю, что было бы неплохо, если бы это работало рекурсивно.

rcutils_calculate_directory_size в настоящее время используется для вычисления метаданных rosbag2 . поскольку все файлы в каталоге не обязательно должны быть рекурсивными прямо сейчас.

rcutils_calculate_directory_size в настоящее время используется для вычисления метаданных rosbag2. поскольку все файлы в каталоге не обязательно должны быть рекурсивными прямо сейчас.

да. Теперь только metadata_io.cpp в rosbag2 вызывают эту функцию.

в нем явно указано, что он не поддерживает рекурсивный поиск. нам нужно, чтобы он был рекурсивным с реальными вариантами использования?

в нем явно указано, что он не поддерживает рекурсивный поиск. нам нужно, чтобы он был рекурсивным с реальными вариантами использования?

да. Текущая реализация в rosbag2, как показано ниже

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

Он вычисляет только общий размер файла по указанному пути. Для базы данных sqlite3 (теперь rosbag2 предоставляет это только в качестве внутреннего хранилища) это нормально, поскольку база данных sqlite3 представляет собой один файл. Но для других (например, leveldb) для сохранения данных используется каталог. Приведенные выше коды не могут получить правильный размер базы данных.
Я хочу обновить эту функцию для поддержки рекурсии.
Эта модификация не должна создавать проблемы для текущих кодов.

Я хочу обновить эту функцию для поддержки рекурсии.
Эта модификация не должна создавать проблемы для текущих кодов.

Да, я не вижу проблемы в том, чтобы улучшить его, чтобы сделать это. Мы можем захотеть ввести логический параметр recursive в функцию на случай, если вызывающая сторона действительно этого не хочет, но в остальном мне это кажется хорошим.

@клалансетте
Копия: @Barry-Xu-2018

Спасибо за комментарий!
на самом деле мы пытались использовать leveldb в качестве серверной базы данных rosbag2. это усовершенствование будет необходимо для этого.

@clalancette @fujitatomoya

Мы можем захотеть ввести в функцию рекурсивный логический параметр на случай, если вызывающая сторона действительно этого не хочет, но в остальном мне это кажется хорошим.

Если добавить новый параметр, после обновления rcutils мы должны одновременно обновить rosbag2. В противном случае сборка rosbag2 завершилась неудачно.

Я тестировал на платформе Linux. Но его нужно протестировать на оконной платформе.
Сейчас я готовлю оконную среду.

Если добавить новый параметр, после обновления rcutils мы должны одновременно обновить rosbag2. В противном случае сборка rosbag2 завершилась неудачно.

мне бы тоже не понравился такой подход. мы можем сохранить интерфейс и улучшить функциональность для рекурсивного поиска. если есть какие-то конкретные варианты использования для нерекурсивного поиска, мы могли бы добавить новую функцию для рекурсивного случая.

мне бы тоже не понравился такой подход. мы можем сохранить интерфейс и улучшить функциональность для рекурсивного поиска. если есть какие-то конкретные варианты использования для нерекурсивного поиска, мы могли бы добавить новую функцию для рекурсивного случая.

Ага. Соглашаться.

@клалансетте

Как насчет улучшения 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() .

ping @Karsten1987 , чтобы понять, не вызовет ли всегда выполнение рекурсивного поиска в rcutils_calculate_directory_size() проблемы для rosbag2.

@клалансетте

Я понимаю ваши опасения.
Я проверил коды. Только ниже коды в rosbag2 используют эту функцию.

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

После изменения кодов я также пробовал rosbag2 с плагином хранилища sqlite3 по умолчанию и не обнаружил проблемы.
Конечно, мы должны услышать мнение @Karsten1987.

@Барри-Сюй-2018

Я думаю, что вы можете закрыть это.

306 был объединен. Так что закройте этот вопрос.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги