made age a required argument for the -clean-deleted command

This commit is contained in:
lujoh
2023-10-20 15:31:55 -04:00
parent 650fbc2563
commit 418f381b49
4 changed files with 9 additions and 16 deletions

View File

@@ -60,14 +60,13 @@ to finish the recomputation.
## Removing large deleted objects ## Removing large deleted objects
Command: `nominatim admin --clean-deleted --age <PostgreSQL Time Interval>` Command: `nominatim admin --clean-deleted <PostgreSQL Time Interval>`
Nominatim refuses to delete very large areas because often these deletions are Nominatim refuses to delete very large areas because often these deletions are
accidental and are reverted within hours. Instead the deletions are logged in accidental and are reverted within hours. Instead the deletions are logged in
the `import_polygon_delete` table and left to the administrator to clean up. the `import_polygon_delete` table and left to the administrator to clean up.
To run this command you will need to pass a PostgreSQL time interval to the age To run this command you will need to pass a PostgreSQL time interval. For example to
parameter. For example to delete any objects that have been deleted more than a delete any objects that have been deleted more than a month ago you would run:
month ago you would run: `nominatim admin --clean-deleted '1 month'`
`nominatim admin --clean-deleted --age '1 month'`

View File

@@ -42,7 +42,7 @@ class AdminFuncs:
help='Print performance analysis of the indexing process') help='Print performance analysis of the indexing process')
objs.add_argument('--collect-os-info', action="store_true", objs.add_argument('--collect-os-info', action="store_true",
help="Generate a report about the host system information") help="Generate a report about the host system information")
objs.add_argument('--clean-deleted', action='store_true', objs.add_argument('--clean-deleted', action='store', metavar='AGE',
help='Clean up deleted relations') help='Clean up deleted relations')
group = parser.add_argument_group('Arguments for cache warming') group = parser.add_argument_group('Arguments for cache warming')
group.add_argument('--search-only', action='store_const', dest='target', group.add_argument('--search-only', action='store_const', dest='target',
@@ -58,8 +58,6 @@ class AdminFuncs:
mgroup.add_argument('--place-id', type=int, mgroup.add_argument('--place-id', type=int,
help='Analyse indexing of the given Nominatim object') help='Analyse indexing of the given Nominatim object')
group = parser.add_argument_group('Arguments for cleaning deleted') group = parser.add_argument_group('Arguments for cleaning deleted')
group.add_argument('--age', type=str,
help='Delete relations older than the given PostgreSQL time interval')
def run(self, args: NominatimArgs) -> int: def run(self, args: NominatimArgs) -> int:
@@ -90,11 +88,9 @@ class AdminFuncs:
return 0 return 0
if args.clean_deleted: if args.clean_deleted:
if not args.age:
self.parser.error('Age is required for --clean-deleted command')
LOG.warning('Cleaning up deleted relations') LOG.warning('Cleaning up deleted relations')
from ..tools import admin from ..tools import admin
admin.clean_deleted_relations(args.config, age=args.age) admin.clean_deleted_relations(args.config, age=args.clean_deleted)
return 0 return 0
return 1 return 1

View File

@@ -72,12 +72,11 @@ class NominatimArgs:
check_database: bool check_database: bool
migrate: bool migrate: bool
collect_os_info: bool collect_os_info: bool
clean_deleted: bool clean_deleted: str
analyse_indexing: bool analyse_indexing: bool
target: Optional[str] target: Optional[str]
osm_id: Optional[str] osm_id: Optional[str]
place_id: Optional[int] place_id: Optional[int]
age: str
# Arguments to 'import' # Arguments to 'import'
osm_file: List[str] osm_file: List[str]

View File

@@ -36,14 +36,13 @@ def test_admin_migrate(cli_call, mock_func_factory):
def test_admin_clean_deleted_relations(cli_call, mock_func_factory): def test_admin_clean_deleted_relations(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations') mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations')
assert cli_call('admin', '--clean-deleted', '--age', '1 month') == 0 assert cli_call('admin', '--clean-deleted', '1 month') == 0
assert mock.called == 1 assert mock.called == 1
def test_admin_clean_deleted_relations_no_age(cli_call, mock_func_factory): def test_admin_clean_deleted_relations_no_age(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations') mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations')
with pytest.raises(SystemExit): assert cli_call('admin', '--clean-deleted') == 1
cli_call('admin', '--clean-deleted')
class TestCliAdminWithDb: class TestCliAdminWithDb: