Rcutils: Calcular el tamaño del directorio especificado (incluir subdirectorio)

Creado en 27 oct. 2020  ·  13Comentarios  ·  Fuente: ros2/rcutils

rcutils_calculate_directory_size() solo admite calcular el tamaño del directorio sin recurrir.
¿Por qué rcutils_calculate_directory_size() no admite recursivo?
¿Hay alguna causa?

Todos 13 comentarios

No se me ocurre nada, pero creo que estaría bien que funcionara recursivamente.

rcutils_calculate_directory_size se usa actualmente para calcular los metadatos de rosbag2 . ya que todos los archivos en el directorio, no tiene que ser recursivo por ahora.

rcutils_calculate_directory_size se usa actualmente para calcular los metadatos de rosbag2. ya que todos los archivos en el directorio, no tiene que ser recursivo por ahora.

Si. Ahora solo metadata_io.cpp en rosbag2 llama a esta función.

describe explícitamente que no admite la búsqueda recursiva. ¿Necesitamos que sea recursivo con casos de uso reales?

describe explícitamente que no admite la búsqueda recursiva. ¿Necesitamos que sea recursivo con casos de uso reales?

Si. Implementación actual en rosbag2 como se muestra a continuación

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

Solo calcula el tamaño total del archivo en la ruta especificada. Para la base de datos sqlite3 (ahora rosbag2 solo proporciona esto como back-end de almacenamiento), está bien ya que la base de datos sqlite3 es un archivo. Pero para otros (como leveldb), usa un directorio para guardar datos. Los códigos anteriores no pueden obtener el tamaño correcto de la base de datos.
Quiero actualizar esta función para admitir recursivo.
Esta modificación no debería introducir el problema para los códigos actuales.

Quiero actualizar esta función para admitir recursivo.
Esta modificación no debería introducir el problema para los códigos actuales.

Sí, no veo ningún problema en mejorarlo para hacer eso. Es posible que deseemos introducir un parámetro booleano recursive a la función en caso de que la persona que llama realmente no quiera eso, pero por lo demás me parece bien.

@clalancette
CC: @Barry-Xu-2018

¡gracias por el comentario!
en realidad, hemos estado tratando de usar leveldb como base de datos back-end de rosbag2. esta mejora sería necesaria para hacer eso.

@clalancette @fujitatomoya

Es posible que deseemos introducir un parámetro booleano recursivo a la función en caso de que la persona que llama realmente no quiera eso, pero por lo demás me parece bien.

Si agrega un nuevo parámetro, después de actualizar rcutils, debemos actualizar rosbag2 al mismo tiempo. De lo contrario, la compilación de rosbag2 falló.

He probado en la plataforma Linux. Pero necesita ser probado en la plataforma de la ventana.
Ahora estoy preparando el entorno de la ventana.

Si agrega un nuevo parámetro, después de actualizar rcutils, debemos actualizar rosbag2 al mismo tiempo. De lo contrario, la compilación de rosbag2 falló.

Tampoco me gustaría este enfoque. podemos mantener la interfaz y mejorar la funcionalidad para buscar recursivamente. si hay casos de uso específicos para la búsqueda no recursiva, podríamos agregar una nueva función para el caso recursivo.

Tampoco me gustaría este enfoque. podemos mantener la interfaz y mejorar la funcionalidad para buscar recursivamente. si hay casos de uso específicos para la búsqueda no recursiva, podríamos agregar una nueva función para el caso recursivo.

Sí. Estar de acuerdo.

@clalancette

¿Qué tal si mejoramos rcutils_calculate_directory_size sin un nuevo parámetro?
Actualmente, rosbag2 puede funcionar correctamente con rcutils_calculate_directory_size() mejorado.

¿Qué tal si mejoramos rcutils_calculate_directory_size sin un nuevo parámetro?
Actualmente, rosbag2 puede funcionar correctamente con rcutils_calculate_directory_size() mejorado.

La razón por la que estoy preocupado por esto es que se habla entre los usuarios de almacenar información "adicional" dentro del directorio rosbag2. Si terminan almacenando una gran cantidad de datos adicionales en subdirectorios, eso podría alterar el tamaño que espera rosbag2.

Si no queremos romper la API, también podríamos agregar otra función que sea rcutils_calculate_directory_size_recursive() .

haciendo ping a @ Karsten1987 para saber si hacer siempre una búsqueda recursiva en rcutils_calculate_directory_size() causará problemas a rosbag2.

@clalancette

Entiendo tus preocupaciones.
He comprobado los códigos. Solo los siguientes códigos en rosbag2 usan esta función.

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

Después de cambiar los códigos, también pruebo rosbag2 con el complemento de almacenamiento sqlite3 predeterminado y no encuentro el problema.
Por supuesto, deberíamos escuchar la opinión de @ Karsten1987.

@Barry-Xu-2018

Supongo que puedes cerrar este.

306 se fusionó. Así que cierra este tema.

¿Fue útil esta página
0 / 5 - 0 calificaciones