From bf47ae354524daf82e3f8f599e4cf84fb59675d5 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 (cherry picked from commit 781989e5bca4e3bfdc3cfec73f0456e35a7db71f) --- .../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 98f591d4e54..d5aee530fd7 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 @@ -7,6 +7,7 @@ import static org.openmetadata.schema.type.Include.ALL; import static org.openmetadata.service.Entity.TABLE; import static org.openmetadata.service.Entity.TEST_CASE; import static org.openmetadata.service.Entity.TEST_SUITE; +import static org.openmetadata.service.Entity.getEntity; import static org.openmetadata.service.util.FullyQualifiedName.quoteName; import java.io.IOException; @@ -21,6 +22,7 @@ import javax.json.JsonValue; import javax.ws.rs.core.SecurityContext; 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; @@ -35,6 +37,9 @@ import org.openmetadata.service.resources.dqtests.TestSuiteResource; import org.openmetadata.service.resources.feeds.MessageParser; 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; @@ -259,6 +264,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;"); + } + } + @Override public void prepare(TestSuite entity, boolean update) { /* Nothing to do */ 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 d15b2758c8a..ee27a18bb88 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 @@ -4,6 +4,7 @@ import static javax.ws.rs.core.Response.Status.BAD_REQUEST; import static javax.ws.rs.core.Response.Status.NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; 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.openmetadata.service.util.TestUtils.ADMIN_AUTH_HEADERS; @@ -15,10 +16,13 @@ import static org.openmetadata.service.util.TestUtils.assertResponseContains; import es.org.elasticsearch.search.aggregations.AggregationBuilder; import es.org.elasticsearch.search.aggregations.AggregationBuilders; +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; @@ -28,6 +32,7 @@ import javax.json.JsonObject; 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; @@ -49,6 +54,7 @@ import org.openmetadata.service.Entity; import org.openmetadata.service.resources.EntityResourceTest; import org.openmetadata.service.resources.databases.TableResourceTest; import org.openmetadata.service.search.elasticsearch.ElasticSearchClient; +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; @@ -878,6 +884,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()); + Assertions.assertTrue( + hitsList.stream() + .allMatch( + hit -> + ((LinkedHashMap) hit.get("_source")) + .get("id") + .equals(table.getId().toString()))); + } + public ResultList getTestSuites( Integer limit, String fields,