diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index c701e8f1a90..fe00bf51d61 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -161,5 +161,6 @@ + diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 985b754d13e..a9b9f5fb14e 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -103,6 +103,7 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; +import com.cloud.uuididentity.dao.IdentityDao; public class ConfigurationServerImpl implements ConfigurationServer { public static final Logger s_logger = Logger.getLogger(ConfigurationServerImpl.class.getName()); @@ -121,6 +122,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { private final AccountDao _accountDao; private final ResourceCountDao _resourceCountDao; private final NetworkOfferingServiceMapDao _ntwkOfferingServiceMapDao; + private final IdentityDao _identityDao; public ConfigurationServerImpl() { ComponentLocator locator = ComponentLocator.getLocator(Name); @@ -137,6 +139,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { _accountDao = locator.getDao(AccountDao.class); _resourceCountDao = locator.getDao(ResourceCountDao.class); _ntwkOfferingServiceMapDao = locator.getDao(NetworkOfferingServiceMapDao.class); + _identityDao = locator.getDao(IdentityDao.class); } @Override @DB @@ -266,10 +269,33 @@ public class ConfigurationServerImpl implements ConfigurationServer { // Update the cloud identifier updateCloudIdentifier(); + updateUuids(); + + // Set init to true _configDao.update("init", "Hidden", "true"); } - + + private void updateUuids() { + _identityDao.initializeDefaultUuid("disk_offering"); + _identityDao.initializeDefaultUuid("network_offerings"); + _identityDao.initializeDefaultUuid("vm_template"); + _identityDao.initializeDefaultUuid("user"); + _identityDao.initializeDefaultUuid("domain"); + _identityDao.initializeDefaultUuid("account"); + _identityDao.initializeDefaultUuid("guest_os"); + _identityDao.initializeDefaultUuid("guest_os_category"); + _identityDao.initializeDefaultUuid("hypervisor_capabilities"); + _identityDao.initializeDefaultUuid("snapshot_policy"); + _identityDao.initializeDefaultUuid("security_group"); + _identityDao.initializeDefaultUuid("security_group_rule"); + _identityDao.initializeDefaultUuid("physical_network"); + _identityDao.initializeDefaultUuid("physical_network_traffic_types"); + _identityDao.initializeDefaultUuid("physical_network_service_providers"); + _identityDao.initializeDefaultUuid("virtual_router_providers"); + _identityDao.initializeDefaultUuid("networks"); + _identityDao.initializeDefaultUuid("user_ip_address"); + } private String getMountParent() { return getEnvironmentProperty("mount.parent"); diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDao.java b/server/src/com/cloud/uuididentity/dao/IdentityDao.java index ca0ea9106b1..2414102e62a 100644 --- a/server/src/com/cloud/uuididentity/dao/IdentityDao.java +++ b/server/src/com/cloud/uuididentity/dao/IdentityDao.java @@ -25,4 +25,5 @@ public interface IdentityDao extends GenericDao { Long getIdentityId(IdentityMapper mapper, String identityString); Long getIdentityId(String tableName, String identityString); String getIdentityUuid(String tableName, String identityString); + void initializeDefaultUuid(String tableName); } diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java index 8c553aa8424..ffe04df258e 100644 --- a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java +++ b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java @@ -20,6 +20,9 @@ package com.cloud.uuididentity.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; import javax.ejb.Local; @@ -99,7 +102,7 @@ public class IdentityDaoImpl extends GenericDaoBase implements try { try { pstmt = txn.prepareAutoCloseStatement( - String.format("SELECT uuid FROM %s WHERE id=? OR uuid=?", tableName) + String.format("SELECT uuid FROM `%s` WHERE id=? OR uuid=?", tableName) // String.format("SELECT uuid FROM %s WHERE (id=? AND uuid IS NULL) OR uuid=?", tableName) ); @@ -130,4 +133,65 @@ public class IdentityDaoImpl extends GenericDaoBase implements return identityString; } + + @DB + public void initializeDefaultUuid(String tableName) { + assert(tableName != null); + List l = getNullUuidRecords(tableName); + + Transaction txn = Transaction.open(Transaction.CLOUD_DB); + try { + try { + txn.start(); + for(Long id : l) { + setInitialUuid(tableName, id); + } + txn.commit(); + } catch (SQLException e) { + txn.rollback(); + s_logger.error("Unexpected exception ", e); + } + } finally { + txn.close(); + } + } + + @DB + List getNullUuidRecords(String tableName) { + List l = new ArrayList(); + + PreparedStatement pstmt = null; + Transaction txn = Transaction.open(Transaction.CLOUD_DB); + try { + try { + pstmt = txn.prepareAutoCloseStatement( + String.format("SELECT id FROM `%s` WHERE uuid IS NULL", tableName) + ); + + ResultSet rs = pstmt.executeQuery(); + while(rs.next()) { + l.add(rs.getLong(1)); + } + } catch (SQLException e) { + s_logger.error("Unexpected exception ", e); + } + } finally { + txn.close(); + } + return l; + } + + @DB + void setInitialUuid(String tableName, long id) throws SQLException { + Transaction txn = Transaction.currentTxn(); + + PreparedStatement pstmtUpdate = null; + pstmtUpdate = txn.prepareAutoCloseStatement( + String.format("UPDATE `%s` SET uuid=? WHERE id=?", tableName) + ); + + pstmtUpdate.setString(1, UUID.randomUUID().toString()); + pstmtUpdate.setLong(2, id); + pstmtUpdate.executeUpdate(); + } }