diff --git a/server/src/com/cloud/storage/dao/SnapshotDao.java b/server/src/com/cloud/storage/dao/SnapshotDao.java index e88cb60db7f..a0bcfa8c8e3 100644 --- a/server/src/com/cloud/storage/dao/SnapshotDao.java +++ b/server/src/com/cloud/storage/dao/SnapshotDao.java @@ -36,5 +36,6 @@ public interface SnapshotDao extends GenericDao { long updateSnapshotVersion(long volumeId, String from, String to); List listByVolumeIdVersion(long volumeId, String version); Long getSecHostId(long volumeId); + long updateSnapshotSecHost(long dcId, long secHostId); } diff --git a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java index 2cc8efce3f9..45dd79e3e5a 100644 --- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java +++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java @@ -40,6 +40,7 @@ public class SnapshotDaoImpl extends GenericDaoBase implements private static final String GET_LAST_SNAPSHOT = "SELECT id FROM snapshots where volume_id = ? AND id != ? AND path IS NOT NULL ORDER BY created DESC"; private static final String UPDATE_SNAPSHOT_VERSION = "UPDATE snapshots SET version = ? WHERE volume_id = ? AND version = ?"; private static final String GET_SECHOST_ID = "SELECT sechost_id FROM snapshots where volume_id = ? AND backup_snap_id IS NOT NULL AND sechost_id IS NOT NULL LIMIT 1"; + private static final String UPDATE_SECHOST_ID = "UPDATE snapshots SET sechost_id = ? WHERE data_center_id = ?"; private final SearchBuilder VolumeIdSearch; private final SearchBuilder VolumeIdTypeSearch; @@ -183,4 +184,21 @@ public class SnapshotDaoImpl extends GenericDaoBase implements } return 0; } + + @Override + public long updateSnapshotSecHost(long dcId, long secHostId) { + Transaction txn = Transaction.currentTxn(); + PreparedStatement pstmt = null; + String sql = UPDATE_SECHOST_ID; + try { + pstmt = txn.prepareAutoCloseStatement(sql); + pstmt.setLong(1, secHostId); + pstmt.setLong(2, dcId); + pstmt.executeUpdate(); + return 1; + } catch (Exception ex) { + s_logger.error("error set secondary storage host id", ex); + } + return 0; + } } diff --git a/server/src/com/cloud/upgrade/dao/Upgrade225to226.java b/server/src/com/cloud/upgrade/dao/Upgrade225to226.java index 38f212aaae9..70988166058 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade225to226.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade225to226.java @@ -19,11 +19,24 @@ package com.cloud.upgrade.dao; import java.io.File; import java.sql.Connection; +import java.util.List; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.utils.component.Inject; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; public class Upgrade225to226 implements DbUpgrade { + @Inject + protected SnapshotDao _snapshotDao; + @Inject + protected HostDao _hostDao; + @Inject + protected DataCenterDao _dcDao; @Override public String[] getUpgradableVersionRange() { @@ -52,6 +65,11 @@ public class Upgrade225to226 implements DbUpgrade { @Override public void performDataMigration(Connection conn) { + List dcs = _dcDao.listAll(); + for ( DataCenterVO dc : dcs ) { + HostVO host = _hostDao.findSecondaryStorageHost(dc.getId()); + _snapshotDao.updateSnapshotSecHost(dc.getId(), host.getId()); + } } @Override diff --git a/setup/db/db/schema-225to226.sql b/setup/db/db/schema-225to226.sql index ab1095116ff..b4b10d139a7 100644 --- a/setup/db/db/schema-225to226.sql +++ b/setup/db/db/schema-225to226.sql @@ -94,3 +94,19 @@ CREATE TABLE `cloud`.`op_host_transfer` ( CONSTRAINT `fk_op_host_transfer__future_mgmt_server_id` FOREIGN KEY `fk_op_host_transfer__future_mgmt_server_id`(`future_mgmt_server_id`) REFERENCES `mshost`(`msid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +ALTER TABLE `cloud`.`snapshots` ADD COLUMN `swift_id` bigint unsigned; +ALTER TABLE `cloud`.`snapshots` ADD COLUMN `swift_name` varchar(255); +ALTER TABLE `cloud`.`snapshots` ADD COLUMN `sechost_id` bigint unsigned; + + +CREATE TABLE `cloud`.`swift` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `hostname` varchar(255), + `account` varchar(255) COMMENT ' account in swift', + `username` varchar(255) COMMENT ' username in swift', + `token` varchar(255) COMMENT 'token for this user', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +