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

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


The following commit(s) were added to refs/heads/4.16 by this push:
     new bdab514  New upgrade schema path and workaround for system VM template 
auto registration
bdab514 is described below

commit bdab51424a000178eeeef024c20354cb283df2fe
Author: nicolas <[email protected]>
AuthorDate: Wed Nov 10 12:56:52 2021 -0300

    New upgrade schema path and workaround for system VM template auto 
registration
---
 engine/schema/pom.xml                              |  4 +-
 .../com/cloud/upgrade/DatabaseUpgradeChecker.java  |  2 +
 .../upgrade/SystemVmTemplateRegistration.java      | 28 +++++--
 .../com/cloud/upgrade/dao/Upgrade41600to41610.java | 87 ++++++++++++++++++++++
 4 files changed, 114 insertions(+), 7 deletions(-)

diff --git a/engine/schema/pom.xml b/engine/schema/pom.xml
index b1776f8..8675352 100644
--- a/engine/schema/pom.xml
+++ b/engine/schema/pom.xml
@@ -75,8 +75,8 @@
                             <source>
                                 def projectVersion = project.version
                                 String[] versionParts =  
projectVersion.tokenize('.')
-                                pom.properties['cs.version'] = versionParts[0] 
+ "." + versionParts[1]
-                                pom.properties['patch.version'] = 
versionParts[2]
+                                pom.properties['cs.version'] = "4.16"
+                                pom.properties['patch.version'] = "0"
                             </source>
                         </configuration>
                     </execution>
diff --git 
a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java 
b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
index e198345..cf3f728 100644
--- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
@@ -30,6 +30,7 @@ import java.util.Date;
 import javax.inject.Inject;
 
 import com.cloud.upgrade.dao.Upgrade41510to41520;
+import com.cloud.upgrade.dao.Upgrade41600to41610;
 import org.apache.cloudstack.utils.CloudStackVersion;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -201,6 +202,7 @@ public class DatabaseUpgradeChecker implements 
SystemIntegrityChecker {
                 .next("4.15.0.0", new Upgrade41500to41510())
                 .next("4.15.1.0", new Upgrade41510to41520())
                 .next("4.15.2.0", new Upgrade41520to41600())
+                .next("4.16.0.0", new Upgrade41600to41610())
                 .build();
     }
 
diff --git 
a/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
 
b/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
index 28c37bc..d788ada 100644
--- 
a/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
+++ 
b/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
@@ -55,6 +55,7 @@ import 
org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.ini4j.Ini;
 
@@ -120,6 +121,8 @@ public class SystemVmTemplateRegistration {
     @Inject
     ConfigurationDao configurationDao;
 
+    private String systemVmTemplateVersion;
+
     public SystemVmTemplateRegistration() {
         dataCenterDao = new DataCenterDaoImpl();
         vmTemplateDao = new VMTemplateDaoImpl();
@@ -131,6 +134,21 @@ public class SystemVmTemplateRegistration {
         configurationDao = new ConfigurationDaoImpl();
     }
 
+    /**
+     * Convenience constructor method to use when there is no system VM 
template change for a new version.
+     */
+    public SystemVmTemplateRegistration(String systemVmTemplateVersion) {
+        this();
+        this.systemVmTemplateVersion = systemVmTemplateVersion;
+    }
+
+    public String getSystemVmTemplateVersion() {
+        if (StringUtils.isEmpty(systemVmTemplateVersion)) {
+            return String.format("%s.%s", CS_MAJOR_VERSION, CS_TINY_VERSION);
+        }
+        return systemVmTemplateVersion;
+    }
+
     private static class SystemVMTemplateDetails {
         Long id;
         String uuid;
@@ -658,7 +676,7 @@ public class SystemVmTemplateRegistration {
                     hypervisorImageFormat.get(hypervisor), 
hypervisorGuestOsMap.get(hypervisor), storeUrlAndId.second(), null, filePath, 
true);
             Map<String, String> configParams = new HashMap<>();
             
configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.first()),
 hypervisorAndTemplateName.second());
-            configParams.put("minreq.sysvmtemplate.version", CS_MAJOR_VERSION 
+ "." + CS_TINY_VERSION);
+            configParams.put("minreq.sysvmtemplate.version", 
getSystemVmTemplateVersion());
             updateConfigurationParams(configParams);
             updateSystemVMEntries(templateId, 
hypervisorAndTemplateName.first());
         } catch (Exception e) {
@@ -809,7 +827,7 @@ public class SystemVmTemplateRegistration {
         // Change value of global configuration parameter router.template.* 
for the corresponding hypervisor and minreq.sysvmtemplate.version for the ACS 
version
         Map<String, String> configParams = new HashMap<>();
         
configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()),
 hypervisorAndTemplateName.getValue());
-        configParams.put("minreq.sysvmtemplate.version", CS_MAJOR_VERSION + 
"." + CS_TINY_VERSION);
+        configParams.put("minreq.sysvmtemplate.version", 
getSystemVmTemplateVersion());
         updateConfigurationParams(configParams);
     }
 
@@ -854,11 +872,11 @@ public class SystemVmTemplateRegistration {
                                     registerTemplates(hypervisorsListInUse);
                                     break;
                                 } catch (final Exception e) {
-                                    throw new 
CloudRuntimeException(String.format("%s.%s %s SystemVm template not found. 
Cannot upgrade system Vms", CS_MAJOR_VERSION, CS_TINY_VERSION, 
hypervisorAndTemplateName.getKey()));
+                                    throw new 
CloudRuntimeException(String.format("%s %s SystemVm template not found. Cannot 
upgrade system Vms", getSystemVmTemplateVersion(), 
hypervisorAndTemplateName.getKey()));
                                 }
                             } else {
-                                LOGGER.warn(String.format("%s.%s %s SystemVm 
template not found. Cannot upgrade system Vms hypervisor is not used, so not 
failing upgrade",
-                                        CS_MAJOR_VERSION, CS_TINY_VERSION, 
hypervisorAndTemplateName.getKey()));
+                                LOGGER.warn(String.format("%s %s SystemVm 
template not found. Cannot upgrade system Vms hypervisor is not used, so not 
failing upgrade",
+                                        getSystemVmTemplateVersion(), 
hypervisorAndTemplateName.getKey()));
                                 // Update the latest template URLs for 
corresponding hypervisor
                                 VMTemplateVO templateVO = 
vmTemplateDao.findLatestTemplateByTypeAndHypervisor(hypervisorAndTemplateName.getKey(),
 Storage.TemplateType.SYSTEM);
                                 if (templateVO != null) {
diff --git 
a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41600to41610.java 
b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41600to41610.java
new file mode 100644
index 0000000..ea796a9
--- /dev/null
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41600to41610.java
@@ -0,0 +1,87 @@
+// 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.log4j.Logger;
+
+import java.io.InputStream;
+import java.sql.Connection;
+
+public class Upgrade41600to41610 implements DbUpgrade, 
DbUpgradeSystemVmTemplate {
+
+    final static Logger LOG = Logger.getLogger(Upgrade41600to41610.class);
+    private SystemVmTemplateRegistration systemVmTemplateRegistration;
+
+    @Override
+    public String[] getUpgradableVersionRange() {
+        return new String[] {"4.16.0.0", "4.16.1.0"};
+    }
+
+    @Override
+    public String getUpgradedVersion() {
+        return "4.16.1.0";
+    }
+
+    @Override
+    public boolean supportsRollingUpgrade() {
+        return false;
+    }
+
+    @Override
+    public InputStream[] getPrepareScripts() {
+        final String scriptFile = "META-INF/db/schema-41600to41610.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) {
+    }
+
+    @Override
+    public InputStream[] getCleanupScripts() {
+        final String scriptFile = 
"META-INF/db/schema-41600to41610-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("4.16.0");
+    }
+
+    @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)");
+        }
+    }
+}

Reply via email to