From 70fe55baf295938cfdc134bb3a95085ff3c96094 Mon Sep 17 00:00:00 2001 From: awildturtok Date: Thu, 22 Oct 2026 16:41:16 +0200 Subject: [PATCH] feat(admin): split matching stats and filter search updates Co-Authored-By: Codex GPT-5 --- .../conquery/models/worker/Namespace.java | 20 +++++++++++-------- .../admin/rest/AdminDatasetProcessor.java | 15 +++++++++++--- .../admin/rest/AdminDatasetResource.java | 17 +++++++++------- .../resources/admin/ui/dataset.html.ftl | 8 ++++++++ .../integration/common/LoadingUtil.java | 14 ++++++++++++- .../tests/ConceptResolutionTest.java | 9 +-------- .../tests/FilterAutocompleteTest.java | 13 ++---------- .../tests/FilterResolutionTest.java | 13 ++---------- .../tests/endpoints/adminEndpointInfo.json | 7 ++++++- .../e2e/backend-admin-ui/test_2_dataset.cy.js | 13 ++++++++++++ scripts/load_e2e_data.sh | 1 + .../preprocess_and_upload.ipynb | 3 +++ 12 files changed, 83 insertions(+), 50 deletions(-) diff --git a/backend/src/main/java/com/bakdata/conquery/models/worker/Namespace.java b/backend/src/main/java/com/bakdata/conquery/models/worker/Namespace.java index dbbefee167..c33ef91793 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/worker/Namespace.java +++ b/backend/src/main/java/com/bakdata/conquery/models/worker/Namespace.java @@ -137,21 +137,25 @@ final void updateFilterSearch() { abstract void registerColumnValuesInSearch(Set columns); /** - * Hook for actions that are best done after all data has been imported and is in a consistent state. - * Such actions are for example search initialization and collection of matching statistics. - * - * @implNote This intentionally submits a SlowJob so that it will be queued after all jobs that are already in the queue (usually import jobs). + * Schedules the collection of matching statistics after all jobs that are already queued (usually import jobs). */ - public void postprocessData() { + public void scheduleMatchingStatsUpdate() { + getJobManager().addSlowJob(new SimpleJob( + "Initiate Update Matching Stats", + this::updateMatchingStats + )); + } + /** + * Schedules the regeneration of the filter search after all jobs that are already queued (usually import jobs). + */ + public void scheduleFilterSearchUpdate() { getJobManager().addSlowJob(new SimpleJob( - "Initiate Update Matching Stats and InternalFilterSearch", + "Initiate Update InternalFilterSearch", () -> { updateInternToExternMappings(); - updateMatchingStats(); updateFilterSearch(); } )); - } } diff --git a/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetProcessor.java b/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetProcessor.java index f18a6c9311..d00bc1d6e7 100644 --- a/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetProcessor.java +++ b/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetProcessor.java @@ -337,12 +337,21 @@ public synchronized void deleteImport(ImportId imp) { } /** - * Issues a postprocessing of the imported data for initializing certain internal modules that are either expensive or need the whole data present. + * Schedules collection of matching statistics for the dataset. */ - public void postprocessNamespace(DatasetId dataset) { + public void updateMatchingStats(DatasetId dataset) { final Namespace ns = getDatasetRegistry().get(dataset); - ns.postprocessData(); + ns.scheduleMatchingStatsUpdate(); + } + + /** + * Schedules regeneration of the filter search for the dataset. + */ + public void updateFilterSearch(DatasetId dataset) { + final Namespace ns = getDatasetRegistry().get(dataset); + + ns.scheduleFilterSearchUpdate(); } public EntityIdMap getIdMapping(Namespace namespace) { diff --git a/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetResource.java b/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetResource.java index 9f8cbb36c4..5e7d46c6b7 100644 --- a/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetResource.java +++ b/backend/src/main/java/com/bakdata/conquery/resources/admin/rest/AdminDatasetResource.java @@ -235,15 +235,18 @@ public void delete() { processor.deleteDataset(dataset); } - /** - * @param dataset the namespace to postprocess - * @implNote The path mapping is historical named. Renaming the path requires some coordination. - */ @POST - @Path("/update-matching-stats") + @Path("update-matching-stats") @Consumes(MediaType.WILDCARD) - public void postprocessNamespace(@PathParam(DATASET) DatasetId dataset) { - processor.postprocessNamespace(dataset); + public void updateMatchingStats(@PathParam(DATASET) DatasetId dataset) { + processor.updateMatchingStats(dataset); + } + + @POST + @Path("update-filter-search") + @Consumes(MediaType.WILDCARD) + public void updateFilterSearch(@PathParam(DATASET) DatasetId dataset) { + processor.updateFilterSearch(dataset); } @POST diff --git a/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/dataset.html.ftl b/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/dataset.html.ftl index 65d07c7f6d..6057ce4b92 100644 --- a/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/dataset.html.ftl +++ b/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/dataset.html.ftl @@ -81,6 +81,14 @@ > Update Matching Stats +