Rcutils: Calcular o tamanho do diretório especificado (incluir subdiretório)

Criado em 27 out. 2020  ·  13Comentários  ·  Fonte: ros2/rcutils

rcutils_calculate_directory_size() suporta apenas o cálculo do tamanho do diretório sem recursividade.
Por que rcutils_calculate_directory_size() não suporta recursiva?
Existe alguma causa?

Todos 13 comentários

Eu não penso em nada, mas acredito que seria bom se funcionasse recursivamente.

rcutils_calculate_directory_size é atualmente usado para calcular metadados rosbag2 . como todos os arquivos no diretório, ele não precisa ser recursivo por enquanto.

rcutils_calculate_directory_size é atualmente usado para calcular metadados rosbag2. como todos os arquivos no diretório, ele não precisa ser recursivo por enquanto.

sim. Agora apenas metadata_io.cpp em rosbag2 chama esta função.

ele descreve explicitamente que não suporta pesquisa recursiva. precisamos que seja recursivo com casos de uso reais?

ele descreve explicitamente que não suporta pesquisa recursiva. precisamos que seja recursivo com casos de uso reais?

sim. Implementação atual no rosbag2 como abaixo

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

Ele só calcula o total do tamanho do arquivo no caminho especificado. Para o banco de dados sqlite3 (agora o rosbag2 fornece isso apenas como back-end de armazenamento), tudo bem, pois o banco de dados sqlite3 é um arquivo. Mas para outros (como leveldb), ele usa um diretório para salvar dados. Os códigos acima não podem obter o tamanho correto do banco de dados.
Eu quero atualizar esta função para suportar recursividade.
Esta modificação não deve introduzir o problema para os códigos atuais.

Eu quero atualizar esta função para suportar recursividade.
Esta modificação não deve introduzir o problema para os códigos atuais.

Sim, não vejo problema em aprimorá-lo para fazer isso. Podemos querer introduzir um parâmetro booleano recursive para a função, caso o chamador realmente não queira isso, mas, caso contrário, parece bom para mim.

@clalancette
CC: @Barry-Xu-2018

obrigado pelo comentário!
na verdade, estamos tentando usar o leveldb como banco de dados de backend rosbag2. esse aprimoramento seria necessário para fazer isso.

@clalancette @fujitatomoya

Podemos querer introduzir um parâmetro booleano recursivo para a função caso o chamador realmente não queira isso, mas por outro lado parece bom para mim.

Se adicionar um novo parâmetro, depois que o rcutils for atualizado, devemos atualizar o rosbag2 ao mesmo tempo. Caso contrário, a compilação do rosbag2 falhou.

Eu testei na plataforma Linux. Mas precisa ser testado na plataforma da janela.
Agora estou preparando o ambiente da janela.

Se adicionar um novo parâmetro, depois que o rcutils for atualizado, devemos atualizar o rosbag2 ao mesmo tempo. Caso contrário, a compilação do rosbag2 falhou.

eu também não gostaria dessa abordagem. podemos manter a interface e aprimorar a funcionalidade de busca recursiva. se houver casos de uso específicos para pesquisa não recursiva, podemos adicionar uma nova função para caso recursivo.

eu também não gostaria dessa abordagem. podemos manter a interface e aprimorar a funcionalidade de busca recursiva. se houver casos de uso específicos para pesquisa não recursiva, podemos adicionar uma nova função para caso recursivo.

Sim. Aceita.

@clalancette

Que tal aprimorarmos rcutils_calculate_directory_size sem novo parâmetro?
Atualmente, rosbag2 pode funcionar corretamente com rcutils_calculate_directory_size() aprimorado.

Que tal aprimorarmos rcutils_calculate_directory_size sem novo parâmetro?
Atualmente, rosbag2 pode funcionar corretamente com rcutils_calculate_directory_size() aprimorado.

A razão pela qual estou preocupado com isso é que há alguma conversa entre os usuários de armazenar informações "adicionais" dentro do diretório rosbag2. Se eles acabarem armazenando muitos dados adicionais em subdiretórios, isso pode prejudicar o tamanho que o rosbag2 está esperando.

Se não quisermos quebrar a API, também podemos adicionar outra função que é rcutils_calculate_directory_size_recursive() .

pingar @Karsten1987 para saber se sempre fazer uma pesquisa recursiva em rcutils_calculate_directory_size() causará problemas para o rosbag2.

@clalancette

Eu entendo suas preocupações.
Verifiquei os códigos. Somente os códigos abaixo no rosbag2 usam esta função.

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

Após alterar os códigos, também tento rosbag2 com o plug-in de armazenamento padrão sqlite3 e não encontro o problema.
Claro, devemos ouvir a opinião de @Karsten1987.

@Barry-Xu-2018

eu acho que você pode fechar este.

306 foi fundido. Então feche este assunto.

Esta página foi útil?
0 / 5 - 0 avaliações