From 9fcbf6a5b95147bf70e5fb0ec18eba531e78613e Mon Sep 17 00:00:00 2001 From: Sriharsha Chintalapani Date: Sun, 4 Aug 2024 19:51:55 -0700 Subject: [PATCH] Minor: Fix Policy rule migration due to owner -> owners (#17285) --- .../migration/mysql/v150/Migration.java | 2 + .../migration/utils/v150/MigrationUtil.java | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v150/Migration.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v150/Migration.java index 65110e2bbc9..356eee9044d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v150/Migration.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v150/Migration.java @@ -3,6 +3,7 @@ package org.openmetadata.service.migration.mysql.v150; import static org.openmetadata.service.migration.utils.v150.MigrationUtil.createSystemDICharts; import static org.openmetadata.service.migration.utils.v150.MigrationUtil.deleteLegacyDataInsightPipelines; import static org.openmetadata.service.migration.utils.v150.MigrationUtil.migrateAutomatorOwner; +import static org.openmetadata.service.migration.utils.v150.MigrationUtil.migratePolicies; import static org.openmetadata.service.migration.utils.v150.MigrationUtil.migrateTestCaseDimension; import static org.openmetadata.service.migration.utils.v150.MigrationUtil.updateDataInsightsApplication; @@ -19,6 +20,7 @@ public class Migration extends MigrationProcessImpl { @Override @SneakyThrows public void runDataMigration() { + migratePolicies(handle, collectionDAO); migrateTestCaseDimension(handle, collectionDAO); createSystemDICharts(); deleteLegacyDataInsightPipelines(pipelineServiceClient); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v150/MigrationUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v150/MigrationUtil.java index a06b3c9e774..58dff70cbd3 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v150/MigrationUtil.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v150/MigrationUtil.java @@ -1,5 +1,8 @@ package org.openmetadata.service.migration.utils.v150; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -13,6 +16,7 @@ import org.jdbi.v3.core.Handle; import org.openmetadata.schema.dataInsight.custom.DataInsightCustomChart; import org.openmetadata.schema.dataInsight.custom.LineChart; import org.openmetadata.schema.dataInsight.custom.SummaryCard; +import org.openmetadata.schema.entity.policies.Policy; import org.openmetadata.schema.entity.services.ingestionPipelines.IngestionPipeline; import org.openmetadata.schema.tests.TestDefinition; import org.openmetadata.schema.type.DataQualityDimensions; @@ -150,6 +154,43 @@ public class MigrationUtil { } } + public static void migratePolicies(Handle handle, CollectionDAO collectionDAO) { + String DB_POLICY_QUERY = "SELECT json FROM policy_entity"; + try { + handle + .createQuery(DB_POLICY_QUERY) + .mapToMap() + .forEach( + row -> { + try { + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode rootNode = objectMapper.readTree(row.get("json").toString()); + ArrayNode rulesArray = (ArrayNode) rootNode.path("rules"); + + rulesArray.forEach( + ruleNode -> { + ArrayNode operationsArray = (ArrayNode) ruleNode.get("operations"); + for (int i = 0; i < operationsArray.size(); i++) { + if ("EditOwner".equals(operationsArray.get(i).asText())) { + operationsArray.set(i, operationsArray.textNode("EditOwners")); + } + } + }); + String updatedJsonString = + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); + Policy policy = JsonUtils.readValue(updatedJsonString, Policy.class); + policy.setUpdatedBy("ingestion-bot"); + policy.setUpdatedAt(System.currentTimeMillis()); + collectionDAO.policyDAO().update(policy); + } catch (Exception e) { + LOG.warn("Error migrating policies", e); + } + }); + } catch (Exception e) { + LOG.warn("Error running the policy migration ", e); + } + } + public static void migrateTestCaseDimension(Handle handle, CollectionDAO collectionDAO) { String MYSQL_TEST_CASE_DIMENSION_QUERY = "SELECT json FROM test_definition WHERE JSON_CONTAINS(json -> '$.testPlatforms', '\"OpenMetadata\"')";