From 781989e5bca4e3bfdc3cfec73f0456e35a7db71f Mon Sep 17 00:00:00 2001 From: Teddy Date: Fri, 18 Oct 2024 12:07:11 +0200 Subject: [PATCH] MINOR - live index on test suite creation (#18317) * fix: live index on test suite creation * fix: make live indexing use entityInterface --- .../service/jdbi3/TestSuiteRepository.java | 29 ++++++++++ .../dqtests/TestSuiteResourceTest.java | 56 +++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestSuiteRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestSuiteRepository.java index 61654fb453f..a582ea55998 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestSuiteRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestSuiteRepository.java @@ -8,12 +8,14 @@ import static org.openmetadata.service.Entity.TABLE; import static org.openmetadata.service.Entity.TEST_CASE; import static org.openmetadata.service.Entity.TEST_CASE_RESULT; import static org.openmetadata.service.Entity.TEST_SUITE; +import static org.openmetadata.service.Entity.getEntity; import static org.openmetadata.service.Entity.getEntityTimeSeriesRepository; import static org.openmetadata.service.util.FullyQualifiedName.quoteName; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.UUID; import javax.json.JsonArray; @@ -23,6 +25,7 @@ import javax.ws.rs.core.SecurityContext; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.jdbi.v3.sqlobject.transaction.Transaction; +import org.openmetadata.schema.EntityInterface; import org.openmetadata.schema.entity.data.Table; import org.openmetadata.schema.tests.DataQualityReport; import org.openmetadata.schema.tests.ResultSummary; @@ -40,6 +43,8 @@ import org.openmetadata.service.search.SearchAggregation; import org.openmetadata.service.search.SearchClient; import org.openmetadata.service.search.SearchIndexUtils; import org.openmetadata.service.search.SearchListFilter; +import org.openmetadata.service.search.indexes.SearchIndex; +import org.openmetadata.service.search.models.IndexMapping; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.FullyQualifiedName; import org.openmetadata.service.util.JsonUtils; @@ -240,6 +245,30 @@ public class TestSuiteRepository extends EntityRepository { return null; } + @Override + protected void postCreate(TestSuite entity) { + super.postCreate(entity); + if (Boolean.TRUE.equals(entity.getExecutable()) + && entity.getExecutableEntityReference() != null) { + // Update table index with test suite field + EntityInterface entityInterface = + getEntity(entity.getExecutableEntityReference(), "testSuite", ALL); + IndexMapping indexMapping = + searchRepository.getIndexMapping(entity.getExecutableEntityReference().getType()); + SearchClient searchClient = searchRepository.getSearchClient(); + SearchIndex index = + searchRepository + .getSearchIndexFactory() + .buildIndex(entity.getExecutableEntityReference().getType(), entityInterface); + Map doc = index.buildSearchIndexDoc(); + searchClient.updateEntity( + indexMapping.getIndexName(searchRepository.getClusterAlias()), + entity.getExecutableEntityReference().getId().toString(), + doc, + "ctx._source.testSuite = params.testSuite;"); + } + } + @SneakyThrows private List getResultSummary(UUID testSuiteId) { List resultSummaries = new ArrayList<>(); diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestSuiteResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestSuiteResourceTest.java index c708b690f78..b4e0cff94a6 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestSuiteResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestSuiteResourceTest.java @@ -3,6 +3,7 @@ package org.openmetadata.service.resources.dqtests; import static javax.ws.rs.core.Response.Status.BAD_REQUEST; import static javax.ws.rs.core.Response.Status.NOT_FOUND; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -13,10 +14,13 @@ import static org.openmetadata.service.util.TestUtils.assertListNull; import static org.openmetadata.service.util.TestUtils.assertResponse; import static org.openmetadata.service.util.TestUtils.assertResponseContains; +import es.org.elasticsearch.client.Request; +import es.org.elasticsearch.client.RestClient; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Random; @@ -25,6 +29,7 @@ import java.util.stream.Collectors; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import org.apache.http.client.HttpResponseException; +import org.apache.http.util.EntityUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @@ -45,6 +50,7 @@ import org.openmetadata.schema.type.Include; import org.openmetadata.service.Entity; import org.openmetadata.service.resources.EntityResourceTest; import org.openmetadata.service.resources.databases.TableResourceTest; +import org.openmetadata.service.search.models.IndexMapping; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.ResultList; import org.openmetadata.service.util.TestUtils; @@ -733,6 +739,56 @@ public class TestSuiteResourceTest extends EntityResourceTest map = + (HashMap) JsonUtils.readOrConvertValue(jsonString, HashMap.class); + LinkedHashMap hits = (LinkedHashMap) map.get("hits"); + ArrayList> hitsList = + (ArrayList>) hits.get("hits"); + assertNotEquals(0, hitsList.size()); + assertTrue( + hitsList.stream() + .allMatch( + hit -> + ((LinkedHashMap) hit.get("_source")) + .get("id") + .equals(table.getId().toString()))); + } + public ResultList getTestSuites( Integer limit, String fields,