Rcutils: Calculer la taille du répertoire spécifié (inclure le sous-répertoire)

Créé le 27 oct. 2020  ·  13Commentaires  ·  Source: ros2/rcutils

rcutils_calculate_directory_size() ne prend en charge que le calcul de la taille du répertoire sans récursivité.
Pourquoi rcutils_calculate_directory_size() ne supporte pas la récursivité ?
Y a-t-il une cause ?

Tous les 13 commentaires

Je ne pense à rien mais je crois que ce serait bien si cela fonctionnait de manière récursive.

rcutils_calculate_directory_size est actuellement utilisé pour calculer les métadonnées rosbag2 . puisque tous les fichiers du répertoire, il n'est pas nécessaire qu'il soit récursif pour le moment.

rcutils_calculate_directory_size est actuellement utilisé pour calculer les métadonnées rosbag2. puisque tous les fichiers du répertoire, il n'est pas nécessaire qu'il soit récursif pour le moment.

Oui. Désormais, seuls metadata_io.cpp dans rosbag2 appellent cette fonction.

il décrit explicitement qu'il ne prend pas en charge la recherche récursive. Avons-nous besoin qu'il soit récursif avec des cas d'utilisation réels ?

il décrit explicitement qu'il ne prend pas en charge la recherche récursive. Avons-nous besoin qu'il soit récursif avec des cas d'utilisation réels ?

Oui. Implémentation actuelle dans rosbag2 comme ci-dessous

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

Il calcule uniquement la taille totale du fichier dans le chemin spécifié. Pour la base de données sqlite3 (maintenant, rosbag2 ne le fournit que comme back-end de stockage), tout va bien puisque la base de données sqlite3 est un fichier. Mais pour d'autres (comme leveldb), il utilise un répertoire pour enregistrer les données. Les codes ci-dessus ne peuvent pas obtenir la taille correcte de la base de données.
Je souhaite mettre à jour cette fonction pour prendre en charge la récursivité.
Cette modification ne devrait pas introduire le problème pour les codes actuels.

Je souhaite mettre à jour cette fonction pour prendre en charge la récursivité.
Cette modification ne devrait pas introduire le problème pour les codes actuels.

Ouais, je ne vois pas de problème à l'améliorer pour faire ça. Nous voudrons peut-être introduire un paramètre booléen recursive dans la fonction au cas où l'appelant ne le veuille vraiment pas, mais sinon, ça me semble bien.

@clalancette
CC : @Barry-Xu-2018

Merci pour le commentaire!
en fait, nous avons essayé d'utiliser leveldb comme base de données principale rosbag2. cette amélioration serait nécessaire pour ce faire.

@clalancette @fujitatomoya

Nous voudrons peut-être introduire un paramètre booléen récursif dans la fonction au cas où l'appelant ne le veuille vraiment pas, mais sinon, cela me semble bien.

Si vous ajoutez un nouveau paramètre, après la mise à jour de rcutils, nous devons mettre à jour rosbag2 en même temps. Sinon, la construction de rosbag2 a échoué.

J'ai testé sur la plate-forme Linux. Mais il doit être testé sur la plate-forme de fenêtre.
Maintenant, je prépare l'environnement de la fenêtre.

Si vous ajoutez un nouveau paramètre, après la mise à jour de rcutils, nous devons mettre à jour rosbag2 en même temps. Sinon, la construction de rosbag2 a échoué.

Je n'aimerais pas non plus cette approche. nous pouvons conserver l'interface et améliorer la fonctionnalité pour rechercher de manière récursive. si des cas d'utilisation spécifiques pour la recherche non récursive, nous pourrions ajouter une nouvelle fonction pour le cas récursif.

Je n'aimerais pas non plus cette approche. nous pouvons conserver l'interface et améliorer la fonctionnalité pour rechercher de manière récursive. si des cas d'utilisation spécifiques pour la recherche non récursive, nous pourrions ajouter une nouvelle fonction pour le cas récursif.

Ouais. Accepter.

@clalancette

Que diriez-vous d'améliorer rutils_calculate_directory_size sans nouveau paramètre ?
Actuellement, rosbag2 peut fonctionner correctement avec rcutils_calculate_directory_size() amélioré.

Que diriez-vous d'améliorer rutils_calculate_directory_size sans nouveau paramètre ?
Actuellement, rosbag2 peut fonctionner correctement avec rcutils_calculate_directory_size() amélioré.

La raison pour laquelle je m'inquiète à ce sujet est que certains utilisateurs parlent de stocker des informations "supplémentaires" dans le répertoire rosbag2. S'ils finissent par stocker beaucoup de données supplémentaires dans des sous-répertoires, cela pourrait perturber la taille attendue par rosbag2.

Si nous ne voulons pas casser l'API, nous pourrions également ajouter une autre fonction qui est rcutils_calculate_directory_size_recursive() .

ping @Karsten1987 pour savoir si toujours faire une recherche récursive dans rcutils_calculate_directory_size() causera des problèmes pour rosbag2.

@clalancette

Je comprends vos préoccupations.
J'ai vérifié les codes. Seuls les codes ci-dessous dans rosbag2 utilisent cette fonction.

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

Après avoir changé les codes, j'essaie également rosbag2 avec le plugin de stockage sqlite3 par défaut et je ne trouve pas le problème.
Bien sûr, nous devrions entendre l'opinion de @ Karsten1987.

@Barry-Xu-2018

Je suppose que vous pouvez fermer celui-ci.

306 a été fusionné. Alors fermez ce sujet.

Cette page vous a été utile?
0 / 5 - 0 notes