You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2022/12/12 07:12:40 UTC

[cloudstack] branch main updated: schema: Fix migration path (#6927)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new ed1ac1c1610 schema: Fix migration path (#6927)
ed1ac1c1610 is described below

commit ed1ac1c16106914008c12264264a1255019bc974
Author: Daniel Augusto Veronezi Salvador <38...@users.noreply.github.com>
AuthorDate: Mon Dec 12 04:12:34 2022 -0300

    schema: Fix migration path (#6927)
    
    PR #5909 was created before the announce of release 4.17.1.0 and the changes in the databases were addressed in the 4.17.0.0 -> 4.18.0.0 migration path. However, #5909 was merged after 4.17.1.0 releasing, with the original migration path.
    
    This PR intends to fix the migration path of PR #5909.
    
    Co-authored-by: GutoVeronezi <da...@scclouds.com.br>
---
 .../com/cloud/upgrade/dao/Upgrade41700to41800.java | 233 ---------------------
 .../com/cloud/upgrade/dao/Upgrade41710to41800.java | 146 +++++++++++++
 .../resources/META-INF/db/schema-41700to41800.sql  |  88 --------
 .../resources/META-INF/db/schema-41710to41800.sql  |  68 ++++++
 4 files changed, 214 insertions(+), 321 deletions(-)

diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41700to41800.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41700to41800.java
deleted file mode 100644
index 6241901dc4f..00000000000
--- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41700to41800.java
+++ /dev/null
@@ -1,233 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.upgrade.dao;
-
-import com.cloud.upgrade.SystemVmTemplateRegistration;
-import com.cloud.utils.exception.CloudRuntimeException;
-import org.apache.cloudstack.api.response.UsageTypeResponse;
-import org.apache.cloudstack.usage.UsageTypes;
-import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.apache.commons.lang3.time.DateUtils;
-import org.apache.log4j.Logger;
-
-import java.io.InputStream;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-public class Upgrade41700to41800 implements DbUpgrade, DbUpgradeSystemVmTemplate {
-
-    final static Logger LOG = Logger.getLogger(Upgrade41700to41800.class);
-    private SystemVmTemplateRegistration systemVmTemplateRegistration;
-
-    @Override
-    public String[] getUpgradableVersionRange() {
-        return new String[] {"4.17.0.0", "4.18.0.0"};
-    }
-
-    @Override
-    public String getUpgradedVersion() {
-        return "4.18.0.0";
-    }
-
-    @Override
-    public boolean supportsRollingUpgrade() {
-        return false;
-    }
-
-    @Override
-    public InputStream[] getPrepareScripts() {
-        final String scriptFile = "META-INF/db/schema-41700to41800.sql";
-        final InputStream script = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
-        if (script == null) {
-            throw new CloudRuntimeException("Unable to find " + scriptFile);
-        }
-
-        return new InputStream[] {script};
-    }
-
-    @Override
-    public void performDataMigration(Connection conn) {
-        convertQuotaTariffsToNewParadigm(conn);
-        convertVmResourcesQuotaTypesToRunningVmQuotaType(conn);
-    }
-
-    @Override
-    public InputStream[] getCleanupScripts() {
-        final String scriptFile = "META-INF/db/schema-41700to41800-cleanup.sql";
-        final InputStream script = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
-        if (script == null) {
-            throw new CloudRuntimeException("Unable to find " + scriptFile);
-        }
-
-        return new InputStream[] {script};
-    }
-
-    private void initSystemVmTemplateRegistration() {
-        systemVmTemplateRegistration = new SystemVmTemplateRegistration();
-    }
-
-    @Override
-    public void updateSystemVmTemplates(Connection conn) {
-        LOG.debug("Updating System Vm template IDs");
-        initSystemVmTemplateRegistration();
-        try {
-            systemVmTemplateRegistration.updateSystemVmTemplates(conn);
-        } catch (Exception e) {
-            throw new CloudRuntimeException("Failed to find / register SystemVM template(s)");
-        }
-    }
-
-    protected void convertQuotaTariffsToNewParadigm(Connection conn) {
-        LOG.info("Converting quota tariffs to new paradigm.");
-
-        List<UsageTypeResponse> usageTypeResponses = UsageTypes.listUsageTypes();
-
-        for (UsageTypeResponse usageTypeResponse : usageTypeResponses) {
-            Integer usageType = usageTypeResponse.getUsageType();
-
-            String tariffTypeDescription = ReflectionToStringBuilderUtils.reflectOnlySelectedFields(usageTypeResponse, "description", "usageType");
-
-            LOG.info(String.format("Converting quota tariffs of type %s to new paradigm.", tariffTypeDescription));
-
-            for (boolean previousTariff : Arrays.asList(true, false)) {
-                Map<Long, Date> tariffs = selectTariffs(conn, usageType, previousTariff, tariffTypeDescription);
-
-                int tariffsSize = tariffs.size();
-                if (tariffsSize <  2) {
-                    LOG.info(String.format("Quota tariff of type %s has [%s] %s register(s). Tariffs with less than 2 register do not need to be converted to new paradigm.",
-                            tariffTypeDescription, tariffsSize, previousTariff ? "previous of current" : "next to current"));
-                    continue;
-                }
-
-                executeUpdateQuotaTariffSetEndDateAndRemoved(conn, usageType, tariffs, previousTariff, tariffTypeDescription);
-            }
-        }
-    }
-
-    protected Map<Long, Date> selectTariffs(Connection conn, Integer usageType, boolean previousTariff, String tariffTypeDescription) {
-        Map<Long, Date> quotaTariffs = new LinkedHashMap<>();
-
-        String selectQuotaTariffs = String.format("SELECT id, effective_on FROM cloud_usage.quota_tariff WHERE %s AND usage_type = ? ORDER BY effective_on, updated_on;",
-                previousTariff ? "usage_name = name" : "removed is null");
-
-        LOG.info(String.format("Selecting %s quota tariffs of type [%s] according to SQL [%s].", previousTariff ? "previous of current" : "next to current",
-                tariffTypeDescription, selectQuotaTariffs));
-
-        try (PreparedStatement pstmt = conn.prepareStatement(selectQuotaTariffs)) {
-            pstmt.setInt(1, usageType);
-
-            try (ResultSet result = pstmt.executeQuery()) {
-                while (result.next()) {
-                    quotaTariffs.put(result.getLong("id"), result.getDate("effective_on"));
-                }
-            }
-            return quotaTariffs;
-        } catch (SQLException e) {
-            String message = String.format("Unable to retrieve %s quota tariffs of type [%s] due to [%s].", previousTariff ? "previous" : "next", tariffTypeDescription,
-                    e.getMessage());
-            LOG.error(message, e);
-            throw new CloudRuntimeException(message, e);
-        }
-    }
-
-    protected void executeUpdateQuotaTariffSetEndDateAndRemoved(Connection conn, Integer usageType, Map<Long, Date> tariffs, boolean setRemoved, String tariffTypeDescription) {
-        String updateQuotaTariff = String.format("UPDATE cloud_usage.quota_tariff SET end_date = ? %s WHERE id = ?;", setRemoved ? ", removed = ?" : "");
-
-        Object[] ids = tariffs.keySet().toArray();
-
-        LOG.info(String.format("Updating %s registers of %s quota tariffs of type [%s] with SQL [%s].", tariffs.size() -1, setRemoved ? "previous of current" :
-                "next to current", tariffTypeDescription, updateQuotaTariff));
-
-        for (int i = 0; i < tariffs.size() - 1; i++) {
-            Long id = Long.valueOf(String.valueOf(ids[i]));
-            Long nextId = Long.valueOf(String.valueOf(ids[i + 1]));
-
-            Date endDate = tariffs.get(nextId);
-
-            if (!DateUtils.isSameDay(endDate, tariffs.get(id))) {
-                endDate = DateUtils.addDays(endDate, -1);
-            }
-
-            try (PreparedStatement pstmt = conn.prepareStatement(updateQuotaTariff)) {
-                java.sql.Date sqlEndDate = new java.sql.Date(endDate.getTime());
-                pstmt.setDate(1, sqlEndDate);
-
-                String updateRemoved = "";
-                if (setRemoved) {
-                    pstmt.setDate(2, sqlEndDate);
-                    pstmt.setLong(3, id);
-
-                    updateRemoved = String.format("and \"removed\" to [%s] ", sqlEndDate);
-                } else {
-                    pstmt.setLong(2, id);
-                }
-
-                LOG.info(String.format("Updating \"end_date\" to [%s] %sof quota tariff with ID [%s].", sqlEndDate, updateRemoved, id));
-                pstmt.executeUpdate();
-            } catch (SQLException e) {
-                String message = String.format("Unable to update \"end_date\" %s of quota tariffs of usage type [%s] due to [%s].", setRemoved ? "and \"removed\"" : "",
-                        usageType, e.getMessage());
-                LOG.error(message, e);
-                throw new CloudRuntimeException(message, e);
-            }
-        }
-    }
-
-    protected void convertVmResourcesQuotaTypesToRunningVmQuotaType(Connection conn) {
-        LOG.info("Converting quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\" to \"RUNNING_VM\".");
-
-        String insertSql = String.format("INSERT INTO cloud_usage.quota_tariff (usage_type, usage_name, usage_unit, usage_discriminator, currency_value, effective_on, updated_on,"
-                + " updated_by, uuid, name, description, removed, end_date, activation_rule)\n"
-                + "SELECT  1, 'RUNNING_VM', usage_unit, '', 0, effective_on, updated_on, updated_by, UUID(), name, description, removed, end_date,\n"
-                + "        CASE\n"
-                + "            WHEN usage_type = 15 THEN CONCAT('((value.computingResources ? (value.computingResources.cpuSpeed * value.computingResources.cpuNumber) : 0) / 100) * ', currency_value)\n"
-                + "            WHEN usage_type = 16 THEN CONCAT('(value.computingResources ? value.computingResources.cpuNumber : 0) * ', currency_value)\n"
-                + "            WHEN usage_type = 17 THEN CONCAT('(value.computingResources ? value.computingResources.memory : 0)* ', currency_value)\n"
-                + "        END\n"
-                + "FROM    cloud_usage.quota_tariff \n"
-                + "WHERE   usage_type in (15, 16, 17) \n"
-                + "AND     currency_value > 0.0;");
-
-        try (PreparedStatement pstmt = conn.prepareStatement(insertSql)) {
-            pstmt.executeUpdate();
-        } catch (SQLException e) {
-            String message = String.format("Failed to convert quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\" to \"RUNNING_VM\" due to [%s].", e.getMessage());
-            LOG.error(message, e);
-            throw new CloudRuntimeException(message, e);
-        }
-
-        LOG.info("Disabling unused quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\".");
-
-        String updateSql = "UPDATE cloud_usage.quota_tariff SET removed = now() WHERE usage_type in (15, 16, 17) and removed is null;";
-
-        try (PreparedStatement pstmt = conn.prepareStatement(updateSql)) {
-            pstmt.executeUpdate();
-        } catch (SQLException e) {
-            String message = String.format("Failed disable quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\" due to [%s].", e.getMessage());
-            LOG.error(message, e);
-            throw new CloudRuntimeException(message, e);
-        }
-    }
-}
diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41710to41800.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41710to41800.java
index 67e75e67863..baa2860b84b 100644
--- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41710to41800.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41710to41800.java
@@ -18,10 +18,22 @@ package com.cloud.upgrade.dao;
 
 import com.cloud.upgrade.SystemVmTemplateRegistration;
 import com.cloud.utils.exception.CloudRuntimeException;
+import org.apache.cloudstack.api.response.UsageTypeResponse;
+import org.apache.cloudstack.usage.UsageTypes;
+import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.apache.log4j.Logger;
 
 import java.io.InputStream;
 import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 public class Upgrade41710to41800 implements DbUpgrade, DbUpgradeSystemVmTemplate {
 
@@ -56,6 +68,8 @@ public class Upgrade41710to41800 implements DbUpgrade, DbUpgradeSystemVmTemplate
 
     @Override
     public void performDataMigration(Connection conn) {
+        convertQuotaTariffsToNewParadigm(conn);
+        convertVmResourcesQuotaTypesToRunningVmQuotaType(conn);
     }
 
     @Override
@@ -83,4 +97,136 @@ public class Upgrade41710to41800 implements DbUpgrade, DbUpgradeSystemVmTemplate
             throw new CloudRuntimeException("Failed to find / register SystemVM template(s)");
         }
     }
+
+    protected void convertQuotaTariffsToNewParadigm(Connection conn) {
+        LOG.info("Converting quota tariffs to new paradigm.");
+
+        List<UsageTypeResponse> usageTypeResponses = UsageTypes.listUsageTypes();
+
+        for (UsageTypeResponse usageTypeResponse : usageTypeResponses) {
+            Integer usageType = usageTypeResponse.getUsageType();
+
+            String tariffTypeDescription = ReflectionToStringBuilderUtils.reflectOnlySelectedFields(usageTypeResponse, "description", "usageType");
+
+            LOG.info(String.format("Converting quota tariffs of type %s to new paradigm.", tariffTypeDescription));
+
+            for (boolean previousTariff : Arrays.asList(true, false)) {
+                Map<Long, Date> tariffs = selectTariffs(conn, usageType, previousTariff, tariffTypeDescription);
+
+                int tariffsSize = tariffs.size();
+                if (tariffsSize <  2) {
+                    LOG.info(String.format("Quota tariff of type %s has [%s] %s register(s). Tariffs with less than 2 register do not need to be converted to new paradigm.",
+                            tariffTypeDescription, tariffsSize, previousTariff ? "previous of current" : "next to current"));
+                    continue;
+                }
+
+                executeUpdateQuotaTariffSetEndDateAndRemoved(conn, usageType, tariffs, previousTariff, tariffTypeDescription);
+            }
+        }
+    }
+
+    protected Map<Long, Date> selectTariffs(Connection conn, Integer usageType, boolean previousTariff, String tariffTypeDescription) {
+        Map<Long, Date> quotaTariffs = new LinkedHashMap<>();
+
+        String selectQuotaTariffs = String.format("SELECT id, effective_on FROM cloud_usage.quota_tariff WHERE %s AND usage_type = ? ORDER BY effective_on, updated_on;",
+                previousTariff ? "usage_name = name" : "removed is null");
+
+        LOG.info(String.format("Selecting %s quota tariffs of type [%s] according to SQL [%s].", previousTariff ? "previous of current" : "next to current",
+                tariffTypeDescription, selectQuotaTariffs));
+
+        try (PreparedStatement pstmt = conn.prepareStatement(selectQuotaTariffs)) {
+            pstmt.setInt(1, usageType);
+
+            try (ResultSet result = pstmt.executeQuery()) {
+                while (result.next()) {
+                    quotaTariffs.put(result.getLong("id"), result.getDate("effective_on"));
+                }
+            }
+            return quotaTariffs;
+        } catch (SQLException e) {
+            String message = String.format("Unable to retrieve %s quota tariffs of type [%s] due to [%s].", previousTariff ? "previous" : "next", tariffTypeDescription,
+                    e.getMessage());
+            LOG.error(message, e);
+            throw new CloudRuntimeException(message, e);
+        }
+    }
+
+    protected void executeUpdateQuotaTariffSetEndDateAndRemoved(Connection conn, Integer usageType, Map<Long, Date> tariffs, boolean setRemoved, String tariffTypeDescription) {
+        String updateQuotaTariff = String.format("UPDATE cloud_usage.quota_tariff SET end_date = ? %s WHERE id = ?;", setRemoved ? ", removed = ?" : "");
+
+        Object[] ids = tariffs.keySet().toArray();
+
+        LOG.info(String.format("Updating %s registers of %s quota tariffs of type [%s] with SQL [%s].", tariffs.size() - 1, setRemoved ? "previous of current" :
+                "next to current", tariffTypeDescription, updateQuotaTariff));
+
+        for (int i = 0; i < tariffs.size() - 1; i++) {
+            Long id = Long.valueOf(String.valueOf(ids[i]));
+            Long nextId = Long.valueOf(String.valueOf(ids[i + 1]));
+
+            Date endDate = tariffs.get(nextId);
+
+            if (!DateUtils.isSameDay(endDate, tariffs.get(id))) {
+                endDate = DateUtils.addDays(endDate, -1);
+            }
+
+            try (PreparedStatement pstmt = conn.prepareStatement(updateQuotaTariff)) {
+                java.sql.Date sqlEndDate = new java.sql.Date(endDate.getTime());
+                pstmt.setDate(1, sqlEndDate);
+
+                String updateRemoved = "";
+                if (setRemoved) {
+                    pstmt.setDate(2, sqlEndDate);
+                    pstmt.setLong(3, id);
+
+                    updateRemoved = String.format("and \"removed\" to [%s] ", sqlEndDate);
+                } else {
+                    pstmt.setLong(2, id);
+                }
+
+                LOG.info(String.format("Updating \"end_date\" to [%s] %sof quota tariff with ID [%s].", sqlEndDate, updateRemoved, id));
+                pstmt.executeUpdate();
+            } catch (SQLException e) {
+                String message = String.format("Unable to update \"end_date\" %s of quota tariffs of usage type [%s] due to [%s].", setRemoved ? "and \"removed\"" : "",
+                        usageType, e.getMessage());
+                LOG.error(message, e);
+                throw new CloudRuntimeException(message, e);
+            }
+        }
+    }
+
+    protected void convertVmResourcesQuotaTypesToRunningVmQuotaType(Connection conn) {
+        LOG.info("Converting quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\" to \"RUNNING_VM\".");
+
+        String insertSql = "INSERT INTO cloud_usage.quota_tariff (usage_type, usage_name, usage_unit, usage_discriminator, currency_value, effective_on, updated_on,"
+                + " updated_by, uuid, name, description, removed, end_date, activation_rule)\n"
+                + "SELECT  1, 'RUNNING_VM', usage_unit, '', 0, effective_on, updated_on, updated_by, UUID(), name, description, removed, end_date,\n"
+                + "        CASE\n"
+                + "            WHEN usage_type = 15 THEN CONCAT('((value.computingResources ? (value.computingResources.cpuSpeed * value.computingResources.cpuNumber) : 0) / 100) * ', currency_value)\n"
+                + "            WHEN usage_type = 16 THEN CONCAT('(value.computingResources ? value.computingResources.cpuNumber : 0) * ', currency_value)\n"
+                + "            WHEN usage_type = 17 THEN CONCAT('(value.computingResources ? value.computingResources.memory : 0) * ', currency_value)\n"
+                + "        END\n"
+                + "FROM    cloud_usage.quota_tariff \n"
+                + "WHERE   usage_type in (15, 16, 17) \n"
+                + "AND     currency_value > 0.0;";
+
+        try (PreparedStatement pstmt = conn.prepareStatement(insertSql)) {
+            pstmt.executeUpdate();
+        } catch (SQLException e) {
+            String message = String.format("Failed to convert quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\" to \"RUNNING_VM\" due to [%s].", e.getMessage());
+            LOG.error(message, e);
+            throw new CloudRuntimeException(message, e);
+        }
+
+        LOG.info("Disabling unused quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\".");
+
+        String updateSql = "UPDATE cloud_usage.quota_tariff SET removed = now() WHERE usage_type in (15, 16, 17) and removed is null;";
+
+        try (PreparedStatement pstmt = conn.prepareStatement(updateSql)) {
+            pstmt.executeUpdate();
+        } catch (SQLException e) {
+            String message = String.format("Failed disable quota tariffs of type \"vCPU\", \"CPU_SPEED\" and \"MEMORY\" due to [%s].", e.getMessage());
+            LOG.error(message, e);
+            throw new CloudRuntimeException(message, e);
+        }
+    }
 }
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41700to41800.sql b/engine/schema/src/main/resources/META-INF/db/schema-41700to41800.sql
deleted file mode 100644
index d3e40547d91..00000000000
--- a/engine/schema/src/main/resources/META-INF/db/schema-41700to41800.sql
+++ /dev/null
@@ -1,88 +0,0 @@
--- Licensed to the Apache Software Foundation (ASF) under one
--- or more contributor license agreements.  See the NOTICE file
--- distributed with this work for additional information
--- regarding copyright ownership.  The ASF licenses this file
--- to you under the Apache License, Version 2.0 (the
--- "License"); you may not use this file except in compliance
--- with the License.  You may obtain a copy of the License at
---
---   http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing,
--- software distributed under the License is distributed on an
--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
--- KIND, either express or implied.  See the License for the
--- specific language governing permissions and limitations
--- under the License.
-
---;
--- Schema upgrade from 4.17.0.0 to 4.18.0.0
---;
-
------ PR Quota custom tariffs #5909---
--- Create column 'uuid'
-ALTER TABLE cloud_usage.quota_tariff
-    ADD COLUMN  `uuid` varchar(40);
-
-UPDATE  cloud_usage.quota_tariff
-SET     uuid = UUID()
-WHERE   uuid is null;
-
-ALTER TABLE cloud_usage.quota_tariff
-    MODIFY      `uuid` varchar(40) NOT NULL;
-
-
--- Create column 'name'
-ALTER TABLE cloud_usage.quota_tariff
-    ADD COLUMN  `name` text
-    COMMENT     'A name, defined by the user, to the tariff. This column will be used as identifier along the tariff updates.';
-
-UPDATE  cloud_usage.quota_tariff
-SET     name = case when effective_on <= now() then usage_name else concat(usage_name, '-', id) end
-WHERE   name is null;
-
-ALTER TABLE cloud_usage.quota_tariff
-    MODIFY      `name` text NOT NULL;
-
-
--- Create column 'description'
-ALTER TABLE cloud_usage.quota_tariff
-    ADD COLUMN  `description` text DEFAULT NULL
-    COMMENT     'The description of the tariff.';
-
-
--- Create column 'activation_rule'
-ALTER TABLE cloud_usage.quota_tariff
-    ADD COLUMN  `activation_rule` text DEFAULT NULL
-    COMMENT     'JS expression that defines when the tariff should be activated.';
-
-
--- Create column 'removed'
-ALTER TABLE cloud_usage.quota_tariff
-    ADD COLUMN  `removed` datetime DEFAULT NULL;
-
-
--- Create column 'end_date'
-ALTER TABLE cloud_usage.quota_tariff
-    ADD COLUMN  `end_date` datetime DEFAULT NULL
-    COMMENT     'Defines the end date of the tarrif.';
-
-
--- Change usage unit to right unit
-UPDATE  cloud_usage.quota_tariff
-SET     usage_unit = 'Compute*Month'
-WHERE   usage_unit = 'Compute-Month';
-
-UPDATE  cloud_usage.quota_tariff
-SET     usage_unit = 'IP*Month'
-WHERE   usage_unit = 'IP-Month';
-
-UPDATE  cloud_usage.quota_tariff
-SET     usage_unit = 'GB*Month'
-WHERE   usage_unit = 'GB-Month';
-
-UPDATE  cloud_usage.quota_tariff
-SET     usage_unit = 'Policy*Month'
-WHERE   usage_unit = 'Policy-Month';
-
------ PR Quota custom tariffs #5909 -----
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41710to41800.sql b/engine/schema/src/main/resources/META-INF/db/schema-41710to41800.sql
index de2903cfb9d..a0c455e6ba7 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41710to41800.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41710to41800.sql
@@ -796,3 +796,71 @@ UPDATE `cloud`.`networks` ntwk
     ntwk.state = 'Setup' AND
     ntwk.removed is NULL AND
     ntwk.guest_type = 'Isolated';
+
+----- PR Quota custom tariffs #5909---
+-- Create column 'uuid'
+ALTER TABLE cloud_usage.quota_tariff
+    ADD COLUMN  `uuid` varchar(40);
+
+UPDATE  cloud_usage.quota_tariff
+SET     uuid = UUID()
+WHERE   uuid is null;
+
+ALTER TABLE cloud_usage.quota_tariff
+    MODIFY      `uuid` varchar(40) NOT NULL;
+
+
+-- Create column 'name'
+ALTER TABLE cloud_usage.quota_tariff
+    ADD COLUMN  `name` text
+    COMMENT     'A name, defined by the user, to the tariff. This column will be used as identifier along the tariff updates.';
+
+UPDATE  cloud_usage.quota_tariff
+SET     name = case when effective_on <= now() then usage_name else concat(usage_name, '-', id) end
+WHERE   name is null;
+
+ALTER TABLE cloud_usage.quota_tariff
+    MODIFY      `name` text NOT NULL;
+
+
+-- Create column 'description'
+ALTER TABLE cloud_usage.quota_tariff
+    ADD COLUMN  `description` text DEFAULT NULL
+    COMMENT     'The description of the tariff.';
+
+
+-- Create column 'activation_rule'
+ALTER TABLE cloud_usage.quota_tariff
+    ADD COLUMN  `activation_rule` text DEFAULT NULL
+    COMMENT     'JS expression that defines when the tariff should be activated.';
+
+
+-- Create column 'removed'
+ALTER TABLE cloud_usage.quota_tariff
+    ADD COLUMN  `removed` datetime DEFAULT NULL;
+
+
+-- Create column 'end_date'
+ALTER TABLE cloud_usage.quota_tariff
+    ADD COLUMN  `end_date` datetime DEFAULT NULL
+    COMMENT     'Defines the end date of the tariff.';
+
+
+-- Change usage unit to right unit
+UPDATE  cloud_usage.quota_tariff
+SET     usage_unit = 'Compute*Month'
+WHERE   usage_unit = 'Compute-Month';
+
+UPDATE  cloud_usage.quota_tariff
+SET     usage_unit = 'IP*Month'
+WHERE   usage_unit = 'IP-Month';
+
+UPDATE  cloud_usage.quota_tariff
+SET     usage_unit = 'GB*Month'
+WHERE   usage_unit = 'GB-Month';
+
+UPDATE  cloud_usage.quota_tariff
+SET     usage_unit = 'Policy*Month'
+WHERE   usage_unit = 'Policy-Month';
+
+----- PR Quota custom tariffs #5909 -----