Skip to content

Commit 72ced48

Browse files
committed
MINOR - test case summary list optimization (#26004)
* fix(testCase-Summary): summary field optimization * fix(testCase-Summary): remove collectors (cherry picked from commit e387503)
1 parent b3c0ce3 commit 72ced48

2 files changed

Lines changed: 24 additions & 43 deletions

File tree

openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestSuiteRepository.java

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ private Map<UUID, List<EntityReference>> batchFetchTestCases(List<TestSuite> tes
238238
public void clearFields(TestSuite entity, EntityUtil.Fields fields) {
239239
entity.setPipelines(fields.contains("pipelines") ? entity.getPipelines() : null);
240240
entity.setSummary(fields.contains("summary") ? entity.getSummary() : null);
241+
entity.setTestCaseResultSummary(
242+
fields.contains("summary") ? entity.getTestCaseResultSummary() : null);
241243
entity.withTests(fields.contains(UPDATE_FIELDS) ? entity.getTests() : null);
242244
}
243245

@@ -423,25 +425,23 @@ private void fetchAndSetTestCaseResultSummary(
423425
List<UUID> suiteIds = testSuites.stream().map(TestSuite::getId).toList();
424426
Map<UUID, List<ResultSummary>> testCaseResultSummaryMap = batchGetResultSummary(suiteIds);
425427

426-
Set<String> allTestCaseFQNs =
427-
testCaseResultSummaryMap.values().stream()
428-
.flatMap(List::stream)
429-
.map(ResultSummary::getTestCaseName)
430-
.collect(Collectors.toSet());
431-
Map<String, String> entityLinkMap = batchResolveEntityLinks(allTestCaseFQNs);
432-
433-
Map<UUID, TestSummary> testSummaryMap =
434-
testCaseResultSummaryMap.entrySet().stream()
435-
.collect(
436-
Collectors.toMap(
437-
Map.Entry::getKey, entry -> getTestSummary(entry.getValue(), entityLinkMap)));
438-
439-
setFieldFromMap(
440-
true, testSuites, testCaseResultSummaryMap, TestSuite::setTestCaseResultSummary);
428+
Map<UUID, TestSummary> testSummaryMap = new HashMap<>();
429+
testCaseResultSummaryMap.forEach(
430+
(id, results) -> testSummaryMap.put(id, computeSimpleSummary(results)));
441431

442432
setFieldFromMap(true, testSuites, testSummaryMap, TestSuite::setSummary);
443433
}
444434

435+
private TestSummary computeSimpleSummary(List<ResultSummary> results) {
436+
Map<String, Integer> statusCounts = new HashMap<>();
437+
for (ResultSummary r : results) {
438+
statusCounts.merge(r.getStatus().toString(), 1, Integer::sum);
439+
}
440+
TestSummary summary = createTestSummary(statusCounts);
441+
summary.setTotal(results.size());
442+
return summary;
443+
}
444+
445445
protected void fetchAndSetIngestionPipelines(List<TestSuite> entities, EntityUtil.Fields fields) {
446446
if (!fields.contains("pipelines") || entities == null || entities.isEmpty()) {
447447
return;
@@ -472,21 +472,6 @@ private Map<UUID, List<ResultSummary>> batchGetResultSummary(List<UUID> testSuit
472472
return repository.listResultSummariesForTestSuites(testSuiteIds);
473473
}
474474

475-
private Map<String, String> batchResolveEntityLinks(Set<String> testCaseFQNs) {
476-
if (testCaseFQNs.isEmpty()) {
477-
return Map.of();
478-
}
479-
List<TestCase> testCases =
480-
Entity.getEntityByNames(TEST_CASE, new ArrayList<>(testCaseFQNs), "", ALL);
481-
Map<String, String> entityLinkMap = new HashMap<>();
482-
for (TestCase tc : testCases) {
483-
MessageParser.EntityLink entityLink = MessageParser.EntityLink.parse(tc.getEntityLink());
484-
String linkString = entityLink.getFieldName() == null ? "table" : entityLink.getLinkString();
485-
entityLinkMap.put(tc.getFullyQualifiedName(), linkString);
486-
}
487-
return entityLinkMap;
488-
}
489-
490475
private TestSummary getTestSummary(
491476
List<ResultSummary> testCaseResults, Map<String, String> entityLinkMap) {
492477
record ProcessedTestCaseResults(String entityLink, String status) {}

openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestSuiteResourceTest.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,22 +1155,18 @@ void test_testSuiteReindexConsistency(TestInfo test)
11551155
verifyTestCases(testSuiteBeforeReindex.getTests(), testSuiteAfterReindex.getTests());
11561156
}
11571157

1158-
// testCaseResultSummary is computed during reindex from DB (not stored per-result).
1159-
// Before reindex, the ES document has no summary because updateTestSuiteSummary()
1160-
// no longer runs on each result POST. After reindex, the summary is populated from DB.
1161-
assertFalse(
1162-
testSuiteAfterReindex.getTestCaseResultSummary().isEmpty(),
1163-
"After reindex, testCaseResultSummary should be populated from DB");
1158+
// The batch /search/list path computes summary (total/success/failed counts) directly
1159+
// from result statuses without populating testCaseResultSummary (which is expensive).
1160+
assertNotNull(
1161+
testSuiteAfterReindex.getSummary(), "After reindex, summary should be populated from DB");
11641162
assertEquals(
11651163
1,
1166-
testSuiteAfterReindex.getTestCaseResultSummary().size(),
1167-
"Should have exactly one test case result summary entry");
1164+
testSuiteAfterReindex.getSummary().getTotal(),
1165+
"Should have exactly one test case in summary total");
11681166
assertEquals(
1169-
testCase.getFullyQualifiedName(),
1170-
testSuiteAfterReindex.getTestCaseResultSummary().get(0).getTestCaseName());
1171-
assertEquals(
1172-
TestCaseStatus.Success,
1173-
testSuiteAfterReindex.getTestCaseResultSummary().get(0).getStatus());
1167+
1,
1168+
testSuiteAfterReindex.getSummary().getSuccess(),
1169+
"The single test case result should be Success");
11741170
}
11751171

11761172
private void postTriggerSearchIndexingApp(Map<String, String> authHeaders) throws IOException {

0 commit comments

Comments
 (0)