Skip to content

Commit c7c289d

Browse files
khsraliagoscinski
andauthored
CLI: verdi storage maintain: show a progress bar (aiidateam#6562)
`verdi storage maintain` now creates and sends over a progress bar to disk-objectstore. The logger is added to frontend (cmd_storage.py) to respect the same convention as in `verdi archive import/migrate/create` Co-authored-by: Alexander Goscinski <[email protected]>
1 parent 72a6b18 commit c7c289d

File tree

8 files changed

+23
-8
lines changed

8 files changed

+23
-8
lines changed

environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ dependencies:
1111
- circus~=0.18.0
1212
- click-spinner~=0.1.8
1313
- click~=8.1
14-
- disk-objectstore~=1.1
14+
- disk-objectstore~=1.2
1515
- docstring_parser
1616
- get-annotations~=0.1
1717
- python-graphviz~=0.19

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ dependencies = [
2323
'circus~=0.18.0',
2424
'click-spinner~=0.1.8',
2525
'click~=8.1',
26-
'disk-objectstore~=1.1',
26+
'disk-objectstore~=1.2',
2727
'docstring-parser',
2828
'get-annotations~=0.1;python_version<"3.10"',
2929
'graphviz~=0.19',

requirements/requirements-py-3.10.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ debugpy==1.6.7
4242
decorator==5.1.1
4343
defusedxml==0.7.1
4444
deprecation==2.1.0
45-
disk-objectstore==1.1.0
45+
disk-objectstore==1.2.0
4646
docstring-parser==0.15
4747
docutils==0.20.1
4848
exceptiongroup==1.1.1

requirements/requirements-py-3.11.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ debugpy==1.6.7
4242
decorator==5.1.1
4343
defusedxml==0.7.1
4444
deprecation==2.1.0
45-
disk-objectstore==1.1.0
45+
disk-objectstore==1.2.0
4646
docstring-parser==0.15
4747
docutils==0.20.1
4848
executing==1.2.0

requirements/requirements-py-3.12.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ debugpy==1.8.0
4242
decorator==5.1.1
4343
defusedxml==0.7.1
4444
deprecation==2.1.0
45-
disk-objectstore==1.1.0
45+
disk-objectstore==1.2.0
4646
docstring-parser==0.15
4747
docutils==0.20.1
4848
executing==2.0.0

requirements/requirements-py-3.9.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ debugpy==1.6.7
4242
decorator==5.1.1
4343
defusedxml==0.7.1
4444
deprecation==2.1.0
45-
disk-objectstore==1.1.0
45+
disk-objectstore==1.2.0
4646
docstring-parser==0.15
4747
docutils==0.20.1
4848
exceptiongroup==1.2.1

src/aiida/cmdline/commands/cmd_storage.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
###########################################################################
99
"""`verdi storage` commands."""
1010

11+
import logging
1112
import sys
1213

1314
import click
@@ -153,7 +154,9 @@ def storage_info(detailed):
153154
def storage_maintain(ctx, full, no_repack, force, dry_run, compress):
154155
"""Performs maintenance tasks on the repository."""
155156
from aiida.common.exceptions import LockingProfileError
157+
from aiida.common.progress_reporter import set_progress_bar_tqdm, set_progress_reporter
156158
from aiida.manage.manager import get_manager
159+
from aiida.storage.log import STORAGE_LOGGER
157160

158161
manager = get_manager()
159162
profile = ctx.obj.profile
@@ -184,6 +187,12 @@ def storage_maintain(ctx, full, no_repack, force, dry_run, compress):
184187
if not dry_run and not force and not click.confirm('Are you sure you want continue in this mode?'):
185188
return
186189

190+
if STORAGE_LOGGER.level <= logging.REPORT:
191+
# Only keep the first tqdm bar if it is info. To keep the nested bar information one needs report level
192+
set_progress_bar_tqdm(leave=STORAGE_LOGGER.level <= logging.INFO)
193+
else:
194+
set_progress_reporter(None)
195+
187196
try:
188197
if full and no_repack:
189198
storage.maintain(full=full, dry_run=dry_run, do_repack=False, compress=compress)

src/aiida/repository/backend/disk_object_store.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ def maintain( # type: ignore[override]
167167
"""
168168
from disk_objectstore import CompressMode
169169

170+
from aiida.common.progress_reporter import create_callback, get_progress_reporter
171+
170172
if live and (do_repack or clean_storage or do_vacuum):
171173
overrides = {'do_repack': do_repack, 'clean_storage': clean_storage, 'do_vacuum': do_vacuum}
172174
keys = ', '.join([key for key, override in overrides.items() if override is True]) # type: ignore
@@ -192,14 +194,18 @@ def maintain( # type: ignore[override]
192194
files_size = container.get_total_size().total_size_loose * BYTES_TO_MB
193195
logger.report(f'Packing all loose files ({files_numb} files occupying {files_size} MB) ...')
194196
if not dry_run:
195-
container.pack_all_loose(compress=compress)
197+
with get_progress_reporter()(total=1) as progress:
198+
callback = create_callback(progress)
199+
container.pack_all_loose(compress=compress, callback=callback)
196200

197201
if do_repack:
198202
files_numb = container.count_objects().packed
199203
files_size = container.get_total_size().total_size_packfiles_on_disk * BYTES_TO_MB
200204
logger.report(f'Re-packing all pack files ({files_numb} files in packs, occupying {files_size} MB) ...')
201205
if not dry_run:
202-
container.repack()
206+
with get_progress_reporter()(total=1) as progress:
207+
callback = create_callback(progress)
208+
container.repack(callback=callback)
203209

204210
if clean_storage:
205211
logger.report(f'Cleaning the repository database (with `vacuum={do_vacuum}`) ...')

0 commit comments

Comments
 (0)