Rcutils: Berechnen Sie die Größe des angegebenen Verzeichnisses (einschließlich Unterverzeichnisse)

Erstellt am 27. Okt. 2020  ·  13Kommentare  ·  Quelle: ros2/rcutils

rcutils_calculate_directory_size() unterstützt nur die Berechnung der Verzeichnisgröße ohne Rekursion.
Warum unterstützt rcutils_calculate_directory_size() keine rekursiven ?
Gibt es eine Ursache?

Alle 13 Kommentare

Mir fällt nichts ein, aber ich glaube, es wäre schön, wenn es rekursiv funktioniert.

rcutils_calculate_directory_size wird derzeit verwendet, um rosbag2-Metadaten zu berechnen. Da alle Dateien im Verzeichnis vorhanden sind, muss es im Moment nicht rekursiv sein.

rcutils_calculate_directory_size wird derzeit verwendet, um rosbag2-Metadaten zu berechnen. Da alle Dateien im Verzeichnis vorhanden sind, muss es im Moment nicht rekursiv sein.

Ja. Jetzt rufen nur noch metadata_io.cpp in rosbag2 diese Funktion auf.

es beschreibt explizit, dass es keine rekursive Suche unterstützt. Brauchen wir es, um mit tatsächlichen Anwendungsfällen rekursiv zu sein?

es beschreibt explizit, dass es keine rekursive Suche unterstützt. Brauchen wir es, um mit tatsächlichen Anwendungsfällen rekursiv zu sein?

Ja. Aktuelle Implementierung in rosbag2 wie unten

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

Es berechnet nur die Gesamtdateigröße im angegebenen Pfad. Für die sqlite3-Datenbank (jetzt bietet rosbag2 dies nur als Speicher-Back-End an) ist es in Ordnung, da die sqlite3-Datenbank eine Datei ist. Aber für andere (wie leveldb) verwendet es ein Verzeichnis, um Daten zu speichern. Die obigen Codes können die richtige Größe der Datenbank nicht erhalten.
Ich möchte diese Funktion aktualisieren, um rekursiv zu unterstützen.
Diese Modifikation sollte das Problem für aktuelle Codes nicht einführen.

Ich möchte diese Funktion aktualisieren, um rekursiv zu unterstützen.
Diese Modifikation sollte das Problem für aktuelle Codes nicht einführen.

Ja, ich sehe kein Problem darin, es zu verbessern, um das zu tun. Wir möchten vielleicht einen recursive booleschen Parameter in die Funktion einführen, falls der Aufrufer das wirklich nicht will, aber ansonsten klingt es für mich gut.

@clalancette
CC: @Barry-Xu-2018

danke für den Kommentar!
Eigentlich haben wir versucht, leveldb als rosbag2-Backend-Datenbank zu verwenden. Dazu wäre diese Erweiterung notwendig.

@clalancette @fujitatomoya

Wir möchten vielleicht einen rekursiven booleschen Parameter in die Funktion einführen, falls der Aufrufer das wirklich nicht will, aber ansonsten klingt es für mich gut.

Wenn Sie nach der Aktualisierung von rcutils einen neuen Parameter hinzufügen, sollten wir gleichzeitig rosbag2 aktualisieren. Andernfalls ist der rosbag2-Build fehlgeschlagen.

Ich habe auf der Linux-Plattform getestet. Aber es muss auf der Windows-Plattform getestet werden.
Jetzt bereite ich die Fensterumgebung vor.

Wenn Sie nach der Aktualisierung von rcutils einen neuen Parameter hinzufügen, sollten wir gleichzeitig rosbag2 aktualisieren. Andernfalls ist der rosbag2-Build fehlgeschlagen.

Diese Vorgehensweise würde mir auch nicht gefallen. Wir können die Schnittstelle beibehalten und die Funktionalität zur rekursiven Suche erweitern. Wenn es spezifische Anwendungsfälle für die nicht rekursive Suche gibt, könnten wir eine neue Funktion für den rekursiven Fall hinzufügen.

Diese Vorgehensweise würde mir auch nicht gefallen. Wir können die Schnittstelle beibehalten und die Funktionalität zur rekursiven Suche erweitern. Wenn es spezifische Anwendungsfälle für die nicht rekursive Suche gibt, könnten wir eine neue Funktion für den rekursiven Fall hinzufügen.

Ja. Zustimmen.

@clalancette

Wie wäre es, wenn wir rcutils_calculate_directory_size ohne neuen Parameter erweitern?
Derzeit kann rosbag2 korrekt mit dem erweiterten rcutils_calculate_directory_size() arbeiten.

Wie wäre es, wenn wir rcutils_calculate_directory_size ohne neuen Parameter erweitern?
Derzeit kann rosbag2 korrekt mit dem erweiterten rcutils_calculate_directory_size() arbeiten.

Der Grund, warum ich darüber besorgt bin, ist, dass unter Benutzern darüber gesprochen wird, "zusätzliche" Informationen im rosbag2-Verzeichnis zu speichern. Wenn sie am Ende viele zusätzliche Daten in Unterverzeichnissen speichern, könnte dies die Größe beeinträchtigen, die rosbag2 erwartet.

Wenn wir die API nicht unterbrechen wollen, könnten wir auch eine andere Funktion hinzufügen, nämlich rcutils_calculate_directory_size_recursive() .

Pingen Sie @Karsten1987 an, um zu erfahren, ob eine immer rekursive Suche in rcutils_calculate_directory_size() Probleme für rosbag2 verursacht.

@clalancette

Ich verstehe Ihre Bedenken.
Ich habe Codes überprüft. Nur die folgenden Codes in rosbag2 verwenden diese Funktion.

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

Nach Änderungscodes versuche ich auch rosbag2 mit dem Standard-sqlite3-Speicher-Plugin und finde das Problem nicht.
Natürlich sollten wir die Meinung von @Karsten1987 hören.

@Barry-Xu-2018

Ich denke, dass Sie dieses schließen können.

306 wurde zusammengelegt. Also schließe dieses Thema.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen