Skip to content

Commit bcd4500

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 1c3a86c commit bcd4500

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
@@ -253,6 +253,8 @@ private Map<UUID, List<EntityReference>> batchFetchTestCases(List<TestSuite> tes
253253
public void clearFields(TestSuite entity, EntityUtil.Fields fields) {
254254
entity.setPipelines(fields.contains("pipelines") ? entity.getPipelines() : null);
255255
entity.setSummary(fields.contains("summary") ? entity.getSummary() : null);
256+
entity.setTestCaseResultSummary(
257+
fields.contains("summary") ? entity.getTestCaseResultSummary() : null);
256258
entity.withTests(fields.contains(UPDATE_FIELDS) ? entity.getTests() : null);
257259
}
258260

@@ -519,25 +521,23 @@ private void fetchAndSetTestCaseResultSummary(
519521
List<UUID> suiteIds = testSuites.stream().map(TestSuite::getId).toList();
520522
Map<UUID, List<ResultSummary>> testCaseResultSummaryMap = batchGetResultSummary(suiteIds);
521523

522-
Set<String> allTestCaseFQNs =
523-
testCaseResultSummaryMap.values().stream()
524-
.flatMap(List::stream)
525-
.map(ResultSummary::getTestCaseName)
526-
.collect(Collectors.toSet());
527-
Map<String, String> entityLinkMap = batchResolveEntityLinks(allTestCaseFQNs);
528-
529-
Map<UUID, TestSummary> testSummaryMap =
530-
testCaseResultSummaryMap.entrySet().stream()
531-
.collect(
532-
Collectors.toMap(
533-
Map.Entry::getKey, entry -> getTestSummary(entry.getValue(), entityLinkMap)));
534-
535-
setFieldFromMap(
536-
true, testSuites, testCaseResultSummaryMap, TestSuite::setTestCaseResultSummary);
524+
Map<UUID, TestSummary> testSummaryMap = new HashMap<>();
525+
testCaseResultSummaryMap.forEach(
526+
(id, results) -> testSummaryMap.put(id, computeSimpleSummary(results)));
537527

538528
setFieldFromMap(true, testSuites, testSummaryMap, TestSuite::setSummary);
539529
}
540530

531+
private TestSummary computeSimpleSummary(List<ResultSummary> results) {
532+
Map<String, Integer> statusCounts = new HashMap<>();
533+
for (ResultSummary r : results) {
534+
statusCounts.merge(r.getStatus().toString(), 1, Integer::sum);
535+
}
536+
TestSummary summary = createTestSummary(statusCounts);
537+
summary.setTotal(results.size());
538+
return summary;
539+
}
540+
541541
protected void fetchAndSetIngestionPipelines(List<TestSuite> entities, EntityUtil.Fields fields) {
542542
if (!fields.contains("pipelines") || entities == null || entities.isEmpty()) {
543543
return;
@@ -568,21 +568,6 @@ private Map<UUID, List<ResultSummary>> batchGetResultSummary(List<UUID> testSuit
568568
return repository.listResultSummariesForTestSuites(testSuiteIds);
569569
}
570570

571-
private Map<String, String> batchResolveEntityLinks(Set<String> testCaseFQNs) {
572-
if (testCaseFQNs.isEmpty()) {
573-
return Map.of();
574-
}
575-
List<TestCase> testCases =
576-
Entity.getEntityByNames(TEST_CASE, new ArrayList<>(testCaseFQNs), "", ALL);
577-
Map<String, String> entityLinkMap = new HashMap<>();
578-
for (TestCase tc : testCases) {
579-
MessageParser.EntityLink entityLink = MessageParser.EntityLink.parse(tc.getEntityLink());
580-
String linkString = entityLink.getFieldName() == null ? "table" : entityLink.getLinkString();
581-
entityLinkMap.put(tc.getFullyQualifiedName(), linkString);
582-
}
583-
return entityLinkMap;
584-
}
585-
586571
private TestSummary getTestSummary(
587572
List<ResultSummary> testCaseResults, Map<String, String> entityLinkMap) {
588573
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
@@ -1466,22 +1466,18 @@ void test_testSuiteReindexConsistency(TestInfo test)
14661466
verifyTestCases(testSuiteBeforeReindex.getTests(), testSuiteAfterReindex.getTests());
14671467
}
14681468

1469-
// testCaseResultSummary is computed during reindex from DB (not stored per-result).
1470-
// Before reindex, the ES document has no summary because updateTestSuiteSummary()
1471-
// no longer runs on each result POST. After reindex, the summary is populated from DB.
1472-
assertFalse(
1473-
testSuiteAfterReindex.getTestCaseResultSummary().isEmpty(),
1474-
"After reindex, testCaseResultSummary should be populated from DB");
1469+
// The batch /search/list path computes summary (total/success/failed counts) directly
1470+
// from result statuses without populating testCaseResultSummary (which is expensive).
1471+
assertNotNull(
1472+
testSuiteAfterReindex.getSummary(), "After reindex, summary should be populated from DB");
14751473
assertEquals(
14761474
1,
1477-
testSuiteAfterReindex.getTestCaseResultSummary().size(),
1478-
"Should have exactly one test case result summary entry");
1479-
assertEquals(
1480-
testCase.getFullyQualifiedName(),
1481-
testSuiteAfterReindex.getTestCaseResultSummary().get(0).getTestCaseName());
1475+
testSuiteAfterReindex.getSummary().getTotal(),
1476+
"Should have exactly one test case in summary total");
14821477
assertEquals(
1483-
TestCaseStatus.Success,
1484-
testSuiteAfterReindex.getTestCaseResultSummary().get(0).getStatus());
1478+
1,
1479+
testSuiteAfterReindex.getSummary().getSuccess(),
1480+
"The single test case result should be Success");
14851481
}
14861482

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

0 commit comments

Comments
 (0)