diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index 343a8a1ea68..84585e6cd66 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -785,8 +785,7 @@ - - + diff --git a/core/src/com/cloud/agent/api/DownloadSnapshotFromS3Command.java b/core/src/com/cloud/agent/api/DownloadSnapshotFromS3Command.java deleted file mode 100644 index edf683a58be..00000000000 --- a/core/src/com/cloud/agent/api/DownloadSnapshotFromS3Command.java +++ /dev/null @@ -1,61 +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.agent.api; - -import com.cloud.agent.api.to.S3TO; - -public class DownloadSnapshotFromS3Command extends SnapshotCommand { - - private S3TO s3; - private String parent; - - protected DownloadSnapshotFromS3Command() { - super(); - } - - public DownloadSnapshotFromS3Command(S3TO s3, String parent, - String secondaryStorageUrl, Long dcId, Long accountId, - Long volumeId, String backupUuid, int wait) { - - super(null, secondaryStorageUrl, backupUuid, "", dcId, accountId, - volumeId); - - this.s3 = s3; - this.parent = parent; - setWait(wait); - - } - - public S3TO getS3() { - return s3; - } - - public void setS3(S3TO s3) { - this.s3 = s3; - } - - public String getParent() { - return parent; - } - - public void setParent(String parent) { - this.parent = parent; - } - -} diff --git a/core/src/com/cloud/agent/api/DownloadSnapshotFromSwiftCommand.java b/core/src/com/cloud/agent/api/DownloadSnapshotFromSwiftCommand.java deleted file mode 100644 index 0711b2ef2d8..00000000000 --- a/core/src/com/cloud/agent/api/DownloadSnapshotFromSwiftCommand.java +++ /dev/null @@ -1,60 +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.agent.api; - -import com.cloud.agent.api.LogLevel.Log4jLevel; -import com.cloud.agent.api.to.SwiftTO; - -/** - * This currently assumes that both primary and secondary storage are mounted on the XenServer. - */ -public class DownloadSnapshotFromSwiftCommand extends SnapshotCommand { - @LogLevel(Log4jLevel.Off) - private SwiftTO _swift; - - private String _parent; - - protected DownloadSnapshotFromSwiftCommand() { - - } - - public DownloadSnapshotFromSwiftCommand(SwiftTO swift, String secondaryStorageUrl, Long dcId, Long accountId, Long volumeId, String parent, String BackupUuid, int wait) { - - super(null, secondaryStorageUrl, BackupUuid, "", dcId, accountId, volumeId); - setParent(parent); - setSwift(swift); - setWait(wait); - } - - - public SwiftTO getSwift() { - return this._swift; - } - - public void setSwift(SwiftTO swift) { - this._swift = swift; - } - - public String getParent() { - return _parent; - } - - public void setParent(String parent) { - this._parent = parent; - } - -} diff --git a/core/src/com/cloud/agent/api/DownloadTemplateFromS3ToSecondaryStorageCommand.java b/core/src/com/cloud/agent/api/DownloadTemplateFromS3ToSecondaryStorageCommand.java deleted file mode 100644 index af61228c020..00000000000 --- a/core/src/com/cloud/agent/api/DownloadTemplateFromS3ToSecondaryStorageCommand.java +++ /dev/null @@ -1,66 +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.agent.api; - -import com.cloud.agent.api.to.S3TO; - -public final class DownloadTemplateFromS3ToSecondaryStorageCommand extends Command { - - private final S3TO s3; - private final Long accountId; - private final Long templateId; - private final String storagePath; - - public DownloadTemplateFromS3ToSecondaryStorageCommand(final S3TO s3, - final Long accountId, final Long templateId, - final String storagePath, final int wait) { - - super(); - - this.s3 = s3; - this.accountId = accountId; - this.templateId = templateId; - this.storagePath = storagePath; - - setWait(wait); - - } - - public S3TO getS3() { - return this.s3; - } - - public Long getAccountId() { - return this.accountId; - } - - public Long getTemplateId() { - return this.templateId; - } - - public String getStoragePath() { - return this.storagePath; - } - - @Override - public boolean executeInSequence() { - return true; - } - -} diff --git a/core/src/com/cloud/agent/api/DownloadTemplateFromSwiftToSecondaryStorageCommand.java b/core/src/com/cloud/agent/api/DownloadTemplateFromSwiftToSecondaryStorageCommand.java deleted file mode 100644 index 79ec882c8d7..00000000000 --- a/core/src/com/cloud/agent/api/DownloadTemplateFromSwiftToSecondaryStorageCommand.java +++ /dev/null @@ -1,90 +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.agent.api; - -import com.cloud.agent.api.LogLevel.Log4jLevel; -import com.cloud.agent.api.to.SwiftTO; - -/** - * - * - */ - -public class DownloadTemplateFromSwiftToSecondaryStorageCommand extends Command { - @LogLevel(Log4jLevel.Off) - private SwiftTO swift; - private String secondaryStorageUrl; - - private Long dcId; - private Long accountId; - private Long templateId; - private String path; - - protected DownloadTemplateFromSwiftToSecondaryStorageCommand() { - - } - - public DownloadTemplateFromSwiftToSecondaryStorageCommand(SwiftTO swift, String secondaryStorageUrl, Long dcId, Long accountId, Long templateId, String path, int wait) { - - this.swift = swift; - this.secondaryStorageUrl = secondaryStorageUrl; - this.dcId = dcId; - this.accountId = accountId; - this.templateId = templateId; - this.path = path; - setWait(wait); - } - - public SwiftTO getSwift() { - return this.swift; - } - - public void setSwift(SwiftTO swift) { - this.swift = swift; - } - - public String getSecondaryStorageUrl() { - return secondaryStorageUrl; - } - - public Long getDcId() { - return dcId; - } - - public Long getAccountId() { - return accountId; - } - - public Long getTemplateId() { - return templateId; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - @Override - public boolean executeInSequence() { - // TODO Auto-generated method stub - return true; - } - -} diff --git a/core/src/com/cloud/agent/api/UploadTemplateToS3FromSecondaryStorageCommand.java b/core/src/com/cloud/agent/api/UploadTemplateToS3FromSecondaryStorageCommand.java deleted file mode 100644 index 1807cd56315..00000000000 --- a/core/src/com/cloud/agent/api/UploadTemplateToS3FromSecondaryStorageCommand.java +++ /dev/null @@ -1,121 +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.agent.api; - -import com.cloud.agent.api.to.S3TO; - -public class UploadTemplateToS3FromSecondaryStorageCommand extends Command { - - private final S3TO s3; - private final String storagePath; - private final Long dataCenterId; - private final Long accountId; - private final Long templateId; - - public UploadTemplateToS3FromSecondaryStorageCommand(final S3TO s3, - final String storagePath, final Long dataCenterId, final Long accountId, - final Long templateId) { - - super(); - - this.s3 = s3; - this.storagePath = storagePath; - this.dataCenterId = dataCenterId; - this.accountId = accountId; - this.templateId = templateId; - - } - - @Override - public boolean executeInSequence() { - return false; - } - - @Override - public boolean equals(final Object thatObject) { - - if (this == thatObject) { - return true; - } - - if (thatObject == null || getClass() != thatObject.getClass()) { - return false; - } - - final UploadTemplateToS3FromSecondaryStorageCommand thatCommand = - (UploadTemplateToS3FromSecondaryStorageCommand) thatObject; - - if (this.accountId != null ? !this.accountId.equals(thatCommand - .accountId) : thatCommand.accountId != null) { - return false; - } - - if (this.dataCenterId != null ? !this.dataCenterId.equals(thatCommand - .dataCenterId) : thatCommand.dataCenterId != null) { - return false; - } - - if (this.s3 != null ? !this.s3.equals(thatCommand.s3) : thatCommand.s3 != null) { - return false; - } - - if (this.storagePath != null ? !this.storagePath.equals(thatCommand - .storagePath) : thatCommand.storagePath != null) { - return false; - } - - if (this.templateId != null ? !this.templateId.equals(thatCommand.templateId) : - thatCommand.templateId != null) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = this.s3 != null ? this.s3.hashCode() : 0; - result = 31 * result + (this.storagePath != null ? this.storagePath.hashCode() : 0); - result = 31 * result + (this.dataCenterId != null ? this.dataCenterId.hashCode() : 0); - result = 31 * result + (this.accountId != null ? this.accountId.hashCode() : 0); - result = 31 * result + (this.templateId != null ? this.templateId.hashCode() : 0); - return result; - } - - public S3TO getS3() { - return this.s3; - } - - public String getStoragePath() { - return this.storagePath; - } - - public Long getDataCenterId() { - return this.dataCenterId; - } - - public Long getAccountId() { - return this.accountId; - } - - public Long getTemplateId() { - return this.templateId; - } - -} diff --git a/core/src/com/cloud/agent/api/UploadTemplateToSwiftFromSecondaryStorageCommand.java b/core/src/com/cloud/agent/api/UploadTemplateToSwiftFromSecondaryStorageCommand.java deleted file mode 100644 index 7ba377da8c3..00000000000 --- a/core/src/com/cloud/agent/api/UploadTemplateToSwiftFromSecondaryStorageCommand.java +++ /dev/null @@ -1,80 +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.agent.api; - -import com.cloud.agent.api.LogLevel.Log4jLevel; -import com.cloud.agent.api.to.SwiftTO; - -/** - * - * - */ - -public class UploadTemplateToSwiftFromSecondaryStorageCommand extends Command { - @LogLevel(Log4jLevel.Off) - private SwiftTO swift; - private String secondaryStorageUrl; - - private Long dcId; - private Long accountId; - private Long templateId; - - protected UploadTemplateToSwiftFromSecondaryStorageCommand() { - - } - - public UploadTemplateToSwiftFromSecondaryStorageCommand(SwiftTO swift, String secondaryStorageUrl, Long dcId, Long accountId, Long templateId, int wait) { - - this.swift = swift; - this.secondaryStorageUrl = secondaryStorageUrl; - this.dcId = dcId; - this.accountId = accountId; - this.templateId = templateId; - setWait(wait); - } - - public SwiftTO getSwift() { - return this.swift; - } - - public void setSwift(SwiftTO swift) { - this.swift = swift; - } - - public String getSecondaryStorageUrl() { - return secondaryStorageUrl; - } - - public Long getDcId() { - return dcId; - } - - public Long getAccountId() { - return accountId; - } - - public Long getTemplateId() { - return templateId; - } - - @Override - public boolean executeInSequence() { - // TODO Auto-generated method stub - return true; - } - -} diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java index ebd6e39155b..817262c28d7 100644 --- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java +++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java @@ -76,7 +76,6 @@ import com.cloud.storage.dao.VMTemplateZoneDaoImpl; import com.cloud.storage.dao.VolumeDaoImpl; import com.cloud.storage.dao.VolumeHostDaoImpl; import com.cloud.storage.download.DownloadMonitorImpl; -import com.cloud.storage.s3.S3Manager; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.tags.dao.ResourceTagsDaoImpl; @@ -186,10 +185,6 @@ public class ChildTestConfiguration extends TestConfiguration { return Mockito.mock(VirtualMachineManager.class); } - @Bean - public S3Manager s3Mgr() { - return Mockito.mock(S3Manager.class); - } @Bean public SnapshotManager snapshotMgr() { diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java index 2630d137863..249a4c6a1e8 100644 --- a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java +++ b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/lifecycle/S3ImageStoreLifeCycleImpl.java @@ -40,7 +40,6 @@ import com.cloud.resource.Discoverer; import com.cloud.resource.ResourceManager; import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; -import com.cloud.storage.s3.S3Manager; public class S3ImageStoreLifeCycleImpl implements ImageStoreLifeCycle { diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index b96805c50f6..d0c5aa6a5b8 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -134,7 +134,6 @@ import com.cloud.storage.VMTemplateVO; import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VMTemplateDao; -import com.cloud.storage.s3.S3Manager; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @@ -194,8 +193,6 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, @Inject protected HostDao _hostDao; @Inject - protected S3Manager _s3Mgr; - @Inject protected HostDetailsDao _hostDetailsDao; @Inject protected ConfigurationDao _configDao; @@ -379,8 +376,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, // Check if the zone exists in the system DataCenterVO zone = _dcDao.findById(dcId); if (zone == null) { - InvalidParameterValueException ex = new InvalidParameterValueException( - "Can't find zone by the id specified"); + InvalidParameterValueException ex = new InvalidParameterValueException( + "Can't find zone by the id specified"); ex.addProxyObject(String.valueOf(dcId), "dcId"); throw ex; } @@ -404,8 +401,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, } // check if pod belongs to the zone if (!Long.valueOf(pod.getDataCenterId()).equals(dcId)) { - InvalidParameterValueException ex = new InvalidParameterValueException( - "Pod with specified id doesn't belong to the zone " + dcId); + InvalidParameterValueException ex = new InvalidParameterValueException( + "Pod with specified id doesn't belong to the zone " + dcId); ex.addProxyObject(pod.getUuid(), "podId"); ex.addProxyObject(zone.getUuid(), "dcId"); throw ex; @@ -548,8 +545,9 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, @Override public Discoverer getMatchingDiscover(Hypervisor.HypervisorType hypervisorType) { for (Discoverer discoverer : _discoverers) { - if (discoverer.getHypervisorType() == hypervisorType) + if (discoverer.getHypervisorType() == hypervisorType) { return discoverer; + } } return null; } @@ -575,8 +573,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, if (clusterId != null) { ClusterVO cluster = _clusterDao.findById(clusterId); if (cluster == null) { - InvalidParameterValueException ex = new InvalidParameterValueException( - "can not find cluster for specified clusterId"); + InvalidParameterValueException ex = new InvalidParameterValueException( + "can not find cluster for specified clusterId"); ex.addProxyObject(clusterId.toString(), "clusterId"); throw ex; } else { @@ -598,7 +596,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, @Override public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, - InvalidParameterValueException { + InvalidParameterValueException { Long dcId = cmd.getZoneId(); String url = cmd.getUrl(); return discoverHostsFull(dcId, null, null, null, url, null, null, "SecondaryStorage", null, null, false); @@ -631,11 +629,11 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, } // check if pod belongs to the zone if (!Long.valueOf(pod.getDataCenterId()).equals(dcId)) { - InvalidParameterValueException ex = new InvalidParameterValueException( - "Pod with specified podId" - + podId - + " doesn't belong to the zone with specified zoneId" - + dcId); + InvalidParameterValueException ex = new InvalidParameterValueException( + "Pod with specified podId" + + podId + + " doesn't belong to the zone with specified zoneId" + + dcId); ex.addProxyObject(pod.getUuid(), "podId"); ex.addProxyObject(zone.getUuid(), "dcId"); throw ex; @@ -694,11 +692,11 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, } catch (Exception e) { cluster = _clusterDao.findBy(clusterName, podId); if (cluster == null) { - CloudRuntimeException ex = new CloudRuntimeException( - "Unable to create cluster " - + clusterName - + " in pod with specified podId and data center with specified dcID", - e); + CloudRuntimeException ex = new CloudRuntimeException( + "Unable to create cluster " + + clusterName + + " in pod with specified podId and data center with specified dcID", + e); ex.addProxyObject(pod.getUuid(), "podId"); ex.addProxyObject(zone.getUuid(), "dcId"); throw ex; @@ -970,11 +968,11 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, if (hypervisorType == HypervisorType.VMware && Boolean.parseBoolean(_configDao.getValue(Config.VmwareUseNexusVSwitch.toString()))) { _clusterVSMMapDao.removeByClusterId(cmd.getId()); } - // remove from dedicated resources - DedicatedResourceVO dr = _dedicatedDao.findByClusterId(cluster.getId()); - if (dr != null) { - _dedicatedDao.remove(dr.getId()); - } + // remove from dedicated resources + DedicatedResourceVO dr = _dedicatedDao.findByClusterId(cluster.getId()); + if (dr != null) { + _dedicatedDao.remove(dr.getId()); + } } txn.commit(); @@ -1439,8 +1437,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, Iterator> it = _resourceStateAdapters.entrySet().iterator(); Object result = null; while (it.hasNext()) { - Map.Entry item = it - .next(); + Map.Entry item = it + .next(); ResourceStateAdapter adapter = item.getValue(); String msg = new String("Dispatching resource state event " + event + " to " + item.getKey()); @@ -1683,7 +1681,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, private void markHostAsDisconnected(HostVO host, StartupCommand[] cmds) { if (host == null) { // in case host is null due to some errors, try - // reloading the host from db + // reloading the host from db if (cmds != null) { StartupCommand firstCmd = cmds[0]; host = findHostByGuid(firstCmd.getGuid()); @@ -1733,13 +1731,13 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, host = findHostByGuid(firstCmd.getGuidWithoutResource()); } if (host != null && host.getRemoved() == null) { // host already - // added, no - // need to add - // again + // added, no + // need to add + // again s_logger.debug("Found the host " + host.getId() + " by guid: " + firstCmd.getGuid() + ", old host reconnected as new"); hostExists = true; // ensures that host status is left - // unchanged in case of adding same one - // again + // unchanged in case of adding same one + // again return null; } } @@ -1805,13 +1803,13 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, host = findHostByGuid(firstCmd.getGuidWithoutResource()); } if (host != null && host.getRemoved() == null) { // host already - // added, no - // need to add - // again + // added, no + // need to add + // again s_logger.debug("Found the host " + host.getId() + " by guid: " + firstCmd.getGuid() + ", old host reconnected as new"); hostExists = true; // ensures that host status is left - // unchanged in case of adding same one - // again + // unchanged in case of adding same one + // again return null; } } @@ -1820,29 +1818,29 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, GlobalLock addHostLock = GlobalLock.getInternLock("AddHostLock"); try { if (addHostLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION)) { // to - // safely - // determine - // first - // host - // in - // cluster - // in - // multi-MS - // scenario + // safely + // determine + // first + // host + // in + // cluster + // in + // multi-MS + // scenario try { host = createHostVO(cmds, resource, details, hostTags, ResourceStateAdapter.Event.CREATE_HOST_VO_FOR_DIRECT_CONNECT); if (host != null) { deferAgentCreation = !isFirstHostInCluster(host); // if - // first - // host - // in - // cluster - // no - // need - // to - // defer - // agent - // creation + // first + // host + // in + // cluster + // no + // need + // to + // defer + // agent + // creation } } finally { addHostLock.unlock(); @@ -1854,8 +1852,8 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, if (host != null) { if (!deferAgentCreation) { // if first host in cluster then - // create agent otherwise defer it to - // scan task + // create agent otherwise defer it to + // scan task attache = _agentMgr.handleDirectConnectAgent(host, cmds, resource, forRebalance); host = _hostDao.findById(host.getId()); // reload } else { @@ -2533,7 +2531,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up); sc.addAnd(sc.getEntity().getResourceState(), Op.EQ, ResourceState.Enabled); return sc.list(); - } + } @Override @DB diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 8e29bb834c7..29b35d1d1fe 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -529,7 +529,6 @@ import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; -import com.cloud.storage.s3.S3Manager; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.tags.ResourceTagVO; @@ -691,10 +690,6 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe DataStoreManager dataStoreMgr; @Inject HostTagsDao _hostTagsDao; - - @Inject - S3Manager _s3Mgr; - @Inject ConfigurationServer _configServer; @Inject diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java index 5467c48c14c..e3ba4b79bbc 100644 --- a/server/src/com/cloud/storage/VolumeManagerImpl.java +++ b/server/src/com/cloud/storage/VolumeManagerImpl.java @@ -31,11 +31,9 @@ import java.util.concurrent.ExecutionException; import javax.inject.Inject; import javax.naming.ConfigurationException; - import org.apache.log4j.Logger; import org.springframework.stereotype.Component; - import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; @@ -45,7 +43,6 @@ import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UpdateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; - import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; @@ -62,7 +59,6 @@ import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; - import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult; import org.apache.cloudstack.framework.async.AsyncCallFuture; import org.apache.cloudstack.storage.command.AttachAnswer; @@ -77,12 +73,9 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity; -import org.apache.commons.lang.StringUtils; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; -import com.cloud.agent.api.storage.CreateVolumeOVAAnswer; -import com.cloud.agent.api.storage.CreateVolumeOVACommand; import com.cloud.agent.api.to.DataTO; import com.cloud.agent.api.to.DiskTO; import com.cloud.agent.api.to.VirtualMachineTO; @@ -148,7 +141,6 @@ import com.cloud.storage.dao.VMTemplateS3Dao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeDetailsDao; import com.cloud.storage.download.DownloadMonitor; -import com.cloud.storage.s3.S3Manager; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.snapshot.SnapshotApiService; import com.cloud.storage.snapshot.SnapshotManager; @@ -243,8 +235,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { @Inject protected VMTemplateS3Dao _vmTemplateS3Dao; @Inject - protected S3Manager _s3Mgr; - @Inject protected VMTemplateDao _vmTemplateDao = null; @Inject protected StoragePoolHostDao _poolHostDao = null; diff --git a/server/src/com/cloud/storage/s3/S3Manager.java b/server/src/com/cloud/storage/s3/S3Manager.java deleted file mode 100644 index 058c5caf32c..00000000000 --- a/server/src/com/cloud/storage/s3/S3Manager.java +++ /dev/null @@ -1,67 +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.storage.s3; - -import java.util.List; -import java.util.Map; - -import com.cloud.agent.api.to.S3TO; -import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; -import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; - -import com.cloud.dc.DataCenterVO; -import com.cloud.exception.DiscoveryException; -import com.cloud.storage.S3; -import com.cloud.storage.S3VO; -import com.cloud.storage.VMTemplateS3VO; -import com.cloud.storage.VMTemplateVO; -import com.cloud.utils.component.Manager; - -public interface S3Manager extends Manager { - - S3TO getS3TO(); - - S3TO getS3TO(Long s3Id); - - S3 addS3(AddS3Cmd addS3Cmd) throws DiscoveryException; - - void verifyS3Fields(Map params) throws DiscoveryException; - - Long chooseZoneForTemplateExtract(VMTemplateVO template); - - boolean isS3Enabled(); - - boolean isTemplateInstalled(Long templateId); - - //void deleteTemplate(final Long accountId, final Long templateId); - - String downloadTemplateFromS3ToSecondaryStorage(final long dcId, - final long templateId, final int primaryStorageDownloadWait); - - List listS3s(ListS3sCmd listS3sCmd); - - VMTemplateS3VO findByTemplateId(Long templateId); - - void propagateTemplatesToZone(DataCenterVO zone); - - void propagateTemplateToAllZones(VMTemplateS3VO vmTemplateS3VO); - - void uploadTemplateToS3FromSecondaryStorage(final VMTemplateVO template); - -} diff --git a/server/src/com/cloud/storage/s3/S3ManagerImpl.java b/server/src/com/cloud/storage/s3/S3ManagerImpl.java deleted file mode 100644 index 1f8486c88ff..00000000000 --- a/server/src/com/cloud/storage/s3/S3ManagerImpl.java +++ /dev/null @@ -1,609 +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.storage.s3; - -import static com.cloud.storage.S3VO.ID_COLUMN_NAME; -import static com.cloud.utils.DateUtil.now; -import static com.cloud.utils.S3Utils.canConnect; -import static com.cloud.utils.S3Utils.canReadWriteBucket; -import static com.cloud.utils.S3Utils.checkBucketName; -import static com.cloud.utils.S3Utils.checkClientOptions; -import static com.cloud.utils.S3Utils.doesBucketExist; -import static com.cloud.utils.StringUtils.join; -import static com.cloud.utils.db.GlobalLock.executeWithNoWaitLock; -import static java.lang.Boolean.TRUE; -import static java.lang.String.format; -import static java.util.Collections.emptyList; -import static java.util.Collections.shuffle; -import static java.util.Collections.singletonList; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.Callable; - -import javax.ejb.Local; -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; -import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; -import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; -import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.DownloadTemplateFromS3ToSecondaryStorageCommand; -import com.cloud.agent.api.UploadTemplateToS3FromSecondaryStorageCommand; -import com.cloud.agent.api.to.S3TO; -import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.exception.DiscoveryException; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.storage.S3; -import com.cloud.storage.S3VO; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateS3VO; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateZoneVO; -import com.cloud.storage.dao.S3Dao; -import com.cloud.storage.dao.VMTemplateDao; -import com.cloud.storage.dao.VMTemplateHostDao; -import com.cloud.storage.dao.VMTemplateS3Dao; -import com.cloud.storage.dao.VMTemplateZoneDao; -import com.cloud.utils.S3Utils.ClientOptions; -import com.cloud.utils.component.ManagerBase; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.exception.CloudRuntimeException; - -@Component -@Local(value = { S3Manager.class }) -public class S3ManagerImpl extends ManagerBase implements S3Manager { - - private static final Logger LOGGER = Logger.getLogger(S3ManagerImpl.class); - - @Inject - private AgentManager agentManager; - - @Inject - private S3Dao s3Dao; - - - @Inject - private VMTemplateZoneDao vmTemplateZoneDao; - - @Inject - private VMTemplateS3Dao vmTemplateS3Dao; - - @Inject - private VMTemplateHostDao vmTemplateHostDao; - - @Inject - private VMTemplateDao vmTemplateDao; - - @Inject - private ConfigurationDao configurationDao; - - @Inject - private DataCenterDao dataCenterDao; - - @Inject - private HostDao hostDao; - - - @Inject - private DataStoreManager dataStoreManager; - - public S3ManagerImpl() { - } - - private void verifyConnection(final S3TO s3) throws DiscoveryException { - - if (!canConnect(s3)) { - throw new DiscoveryException(format("Unable to connect to S3 " - + "using access key %1$s, secret key %2$s, and endpoint, " - + "%3$S", s3.getAccessKey(), s3.getSecretKey(), - s3.getEndPoint() != null ? s3.getEndPoint() : "default")); - } - - } - - private void verifyBuckets(S3TO s3) throws DiscoveryException { - - final List errorMessages = new ArrayList(); - - errorMessages.addAll(verifyBucket(s3, s3.getBucketName())); - - throwDiscoveryExceptionFromErrorMessages(errorMessages); - - } - - private List verifyBucket(final ClientOptions clientOptions, - final String bucketName) { - - if (!doesBucketExist(clientOptions, bucketName)) { - return singletonList(format("Bucket %1$s does not exist.", - bucketName)); - } - - if (!canReadWriteBucket(clientOptions, bucketName)) { - return singletonList(format("Can read/write from bucket %1$s.", - bucketName)); - } - - return emptyList(); - } - - private void validateFields(final S3VO s3VO) { - - final List errorMessages = new ArrayList(); - - errorMessages.addAll(checkClientOptions(s3VO.toS3TO())); - - errorMessages.addAll(checkBucketName("template", s3VO.getBucketName())); - - throwDiscoveryExceptionFromErrorMessages(errorMessages); - - } - - private void enforceS3PreConditions() throws DiscoveryException { - - if (!this.isS3Enabled()) { - throw new DiscoveryException("S3 is not enabled."); - } - - if (this.getS3TO() != null) { - throw new DiscoveryException("Attempt to define multiple S3 " - + "instances. Only one instance definition is supported."); - } - - } - - private void throwDiscoveryExceptionFromErrorMessages( - final List errorMessages) { - - if (!errorMessages.isEmpty()) { - throw new CloudRuntimeException(join(errorMessages, " ")); - } - - } - - static String determineLockId(final long accountId, final long templateId) { - - // TBD The lock scope may be too coarse grained. Deletes need to lock - // the template across all zones where upload and download could - // probably safely scoped to the zone ... - return join("_", "S3_TEMPLATE", accountId, templateId); - - } - - @Override - public S3TO getS3TO(final Long s3Id) { - return this.s3Dao.getS3TO(s3Id); - } - - @Override - public S3TO getS3TO() { - - final List s3s = this.s3Dao.listAll(); - - if (s3s == null || (s3s != null && s3s.isEmpty())) { - return null; - } - - if (s3s.size() == 1) { - return s3s.get(0).toS3TO(); - } - - throw new CloudRuntimeException("Multiple S3 instances have been " - + "defined. Only one instance configuration is supported."); - - } - - @Override - public S3 addS3(final AddS3Cmd addS3Cmd) throws DiscoveryException { - - this.enforceS3PreConditions(); - - final S3VO s3VO = new S3VO(UUID.randomUUID().toString(), - addS3Cmd.getAccessKey(), addS3Cmd.getSecretKey(), - addS3Cmd.getEndPoint(), addS3Cmd.getBucketName(), - addS3Cmd.getHttpsFlag(), addS3Cmd.getConnectionTimeout(), - addS3Cmd.getMaxErrorRetry(), addS3Cmd.getSocketTimeout(), now()); - - this.validateFields(s3VO); - - final S3TO s3 = s3VO.toS3TO(); - this.verifyConnection(s3); - this.verifyBuckets(s3); - - return this.s3Dao.persist(s3VO); - - } - - - @Override - public void verifyS3Fields(Map params) throws DiscoveryException { - final S3VO s3VO = new S3VO(UUID.randomUUID().toString(), - params.get(ApiConstants.S3_ACCESS_KEY), - params.get(ApiConstants.S3_SECRET_KEY), - params.get(ApiConstants.S3_END_POINT), - params.get(ApiConstants.S3_BUCKET_NAME), - params.get(ApiConstants.S3_HTTPS_FLAG) == null ? false : Boolean.valueOf(params.get(ApiConstants.S3_HTTPS_FLAG)), - params.get(ApiConstants.S3_CONNECTION_TIMEOUT) == null ? null : Integer.valueOf(params.get(ApiConstants.S3_CONNECTION_TIMEOUT)), - params.get(ApiConstants.S3_MAX_ERROR_RETRY) == null ? null : Integer.valueOf(params.get(ApiConstants.S3_MAX_ERROR_RETRY)), - params.get(ApiConstants.S3_SOCKET_TIMEOUT) == null ? null : Integer.valueOf(params.get(ApiConstants.S3_SOCKET_TIMEOUT)), now()); - - this.validateFields(s3VO); - - final S3TO s3 = s3VO.toS3TO(); - this.verifyConnection(s3); - this.verifyBuckets(s3); - } - - @Override - public boolean isS3Enabled() { - return false; - } - - @Override - public boolean isTemplateInstalled(final Long templateId) { - throw new UnsupportedOperationException( - "S3Manager#isTemplateInstalled (DeleteIsoCmd) has not yet " - + "been implemented"); - } - - - - @SuppressWarnings("unchecked") - @Override - public String downloadTemplateFromS3ToSecondaryStorage( - final long dataCenterId, final long templateId, - final int primaryStorageDownloadWait) { - - if (!isS3Enabled()) { - return null; - } - - final VMTemplateVO template = vmTemplateDao.findById(templateId); - if (template == null) { - final String errorMessage = String - .format("Failed to download template id %1$s from S3 because the template definition was not found.", - templateId); - LOGGER.error(errorMessage); - return errorMessage; - } - - final VMTemplateS3VO templateS3VO = findByTemplateId(templateId); - if (templateS3VO == null) { - final String errorMessage = format( - "Failed to download template id %1$s from S3 because it does not exist in S3.", - templateId); - LOGGER.error(errorMessage); - return errorMessage; - } - - final S3TO s3 = getS3TO(templateS3VO.getS3Id()); - if (s3 == null) { - final String errorMessage = format( - "Failed to download template id %1$s from S3 because S3 id %2$s does not exist.", - templateId, templateS3VO); - LOGGER.error(errorMessage); - return errorMessage; - } - - final DataStore secondaryStore = this.dataStoreManager.getImageStore(dataCenterId); - if (secondaryStore == null) { - final String errorMessage = format( - "Unable to find secondary storage for zone id %1$s.", - dataCenterId); - LOGGER.error(errorMessage); - throw new CloudRuntimeException(errorMessage); - } - - final long accountId = template.getAccountId(); - final DownloadTemplateFromS3ToSecondaryStorageCommand cmd = new DownloadTemplateFromS3ToSecondaryStorageCommand( - s3, accountId, templateId, secondaryStore.getName(), - primaryStorageDownloadWait); - - try { - - executeWithNoWaitLock(determineLockId(accountId, templateId), - new Callable() { - - @Override - public Void call() throws Exception { - - final Answer answer = agentManager.sendToSSVM( - dataCenterId, cmd); - - if (answer == null || !answer.getResult()) { - final String errMsg = String - .format("Failed to download template from S3 to secondary storage due to %1$s", - (answer == null ? "answer is null" - : answer.getDetails())); - LOGGER.error(errMsg); - throw new CloudRuntimeException(errMsg); - } - - final String installPath = join(File.separator, "template", "tmpl", accountId, templateId); - final VMTemplateHostVO tmpltHost = new VMTemplateHostVO( - secondaryStore.getId(), templateId, - now(), 100, Status.DOWNLOADED, null, null, - null, installPath, template.getUrl()); - tmpltHost.setSize(templateS3VO.getSize()); - tmpltHost.setPhysicalSize(templateS3VO - .getPhysicalSize()); - vmTemplateHostDao.persist(tmpltHost); - - return null; - - } - - }); - - } catch (Exception e) { - final String errMsg = "Failed to download template from S3 to secondary storage due to " - + e.toString(); - LOGGER.error(errMsg); - throw new CloudRuntimeException(errMsg); - } - - return null; - - } - - @Override - public List listS3s(final ListS3sCmd cmd) { - - final Filter filter = new Filter(S3VO.class, ID_COLUMN_NAME, TRUE, - cmd.getStartIndex(), cmd.getPageSizeVal()); - final SearchCriteria criteria = this.s3Dao.createSearchCriteria(); - - return this.s3Dao.search(criteria, filter); - - } - - @Override - public VMTemplateS3VO findByTemplateId(final Long templateId) { - throw new UnsupportedOperationException( - "S3Manager#findByTemplateId(Long) has not yet " - + "been implemented"); - } - - @Override - public void propagateTemplatesToZone(final DataCenterVO zone) { - - if (!isS3Enabled()) { - return; - } - - final List s3VMTemplateRefs = this.vmTemplateS3Dao - .listAll(); - if (LOGGER.isInfoEnabled()) { - LOGGER.info(format("Propagating %1$s templates to zone %2$s.", - s3VMTemplateRefs.size(), zone.getName())); - } - - for (final VMTemplateS3VO templateS3VO : s3VMTemplateRefs) { - this.vmTemplateZoneDao.persist(new VMTemplateZoneVO(zone.getId(), - templateS3VO.getTemplateId(), now())); - } - - } - - @Override - public boolean configure(final String name, final Map params) - throws ConfigurationException { - - if (LOGGER.isInfoEnabled()) { - LOGGER.info(format("Configuring S3 Manager %1$s", name)); - } - - return true; - } - - @Override - public boolean start() { - LOGGER.info("Starting S3 Manager"); - return true; - } - - @Override - public boolean stop() { - LOGGER.info("Stopping S3 Manager"); - return true; - } - - @Override - public void propagateTemplateToAllZones(final VMTemplateS3VO vmTemplateS3VO) { - - final long templateId = vmTemplateS3VO.getId(); - - if (!isS3Enabled()) { - if (LOGGER.isTraceEnabled()) { - LOGGER.trace(format( - "Attempt to propogate template id %1$s across all zones. However, S3 is not enabled.", - templateId)); - } - return; - - } - - final S3TO s3 = getS3TO(); - - if (s3 == null) { - LOGGER.warn(format( - "Unable to propagate template id %1$s across all zones because S3 is enabled, but not configured.", - templateId)); - return; - } - - if (vmTemplateS3VO != null) { - final List dataCenters = dataCenterDao.listAll(); - for (DataCenterVO dataCenter : dataCenters) { - final VMTemplateZoneVO tmpltZoneVO = new VMTemplateZoneVO( - dataCenter.getId(), templateId, now()); - vmTemplateZoneDao.persist(tmpltZoneVO); - } - } - - } - - @Override - public Long chooseZoneForTemplateExtract(VMTemplateVO template) { - - final S3TO s3 = getS3TO(); - - if (s3 == null) { - return null; - } - - final List templateHosts = vmTemplateHostDao - .listByOnlyTemplateId(template.getId()); - if (templateHosts != null) { - shuffle(templateHosts); - for (VMTemplateHostVO vmTemplateHostVO : templateHosts) { - final HostVO host = hostDao.findById(vmTemplateHostVO - .getHostId()); - if (host != null) { - return host.getDataCenterId(); - } - throw new CloudRuntimeException( - format("Unable to find secondary storage host for template id %1$s.", - template.getId())); - } - } - - final List dataCenters = dataCenterDao.listAll(); - shuffle(dataCenters); - return dataCenters.get(0).getId(); - - } - - @Override - public void uploadTemplateToS3FromSecondaryStorage( - final VMTemplateVO template) { - - final Long templateId = template.getId(); - - final List templateHostRefs = vmTemplateHostDao - .listByTemplateId(templateId); - - if (templateHostRefs == null - || (templateHostRefs != null && templateHostRefs.isEmpty())) { - throw new CloudRuntimeException( - format("Attempt to sync template id %1$s that is not attached to a host.", - templateId)); - } - - final VMTemplateHostVO templateHostRef = templateHostRefs.get(0); - - if (!isS3Enabled()) { - return; - } - - final S3TO s3 = getS3TO(); - if (s3 == null) { - LOGGER.warn("S3 Template Sync Failed: Attempt to sync templates with S3, but no S3 instance defined."); - return; - } - - final HostVO secondaryHost = this.hostDao.findById(templateHostRef - .getHostId()); - if (secondaryHost == null) { - throw new CloudRuntimeException(format( - "Unable to find secondary storage host id %1$s.", - templateHostRef.getHostId())); - } - - final Long dataCenterId = secondaryHost.getDataCenterId(); - final Long accountId = template.getAccountId(); - - try { - - executeWithNoWaitLock(determineLockId(accountId, templateId), - new Callable() { - - @Override - public Void call() throws Exception { - - final UploadTemplateToS3FromSecondaryStorageCommand cmd = new UploadTemplateToS3FromSecondaryStorageCommand( - s3, secondaryHost.getStorageUrl(), - dataCenterId, accountId, templateId); - - final Answer answer = agentManager.sendToSSVM( - dataCenterId, cmd); - if (answer == null || !answer.getResult()) { - - final String reason = answer != null ? answer - .getDetails() - : "S3 template sync failed due to an unspecified error."; - throw new CloudRuntimeException( - format("Failed to upload template id %1$s to S3 from secondary storage due to %2$s.", - templateId, reason)); - - } - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(format( - "Creating VMTemplateS3VO instance using template id %1s.", - templateId)); - } - - final VMTemplateS3VO vmTemplateS3VO = new VMTemplateS3VO( - s3.getId(), templateId, now(), - templateHostRef.getSize(), templateHostRef - .getPhysicalSize()); - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(format("Persisting %1$s", - vmTemplateS3VO)); - } - - vmTemplateS3Dao.persist(vmTemplateS3VO); - propagateTemplateToAllZones(vmTemplateS3VO); - - return null; - - } - - }); - - } catch (Exception e) { - - final String errorMessage = format( - "Failed to upload template id %1$s for zone id %2$s to S3.", - templateId, dataCenterId); - LOGGER.error(errorMessage, e); - - } - - } - -} diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 14fb65d9ff8..512aaf97c0e 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -99,7 +99,6 @@ import com.cloud.storage.dao.SnapshotPolicyDao; import com.cloud.storage.dao.SnapshotScheduleDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; -import com.cloud.storage.s3.S3Manager; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.template.TemplateConstants; import com.cloud.tags.ResourceTagVO; @@ -179,8 +178,6 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, @Inject private ResourceLimitService _resourceLimitMgr; @Inject - private S3Manager _s3Mgr; - @Inject private SecondaryStorageVmManager _ssvmMgr; @Inject private DomainManager _domainMgr; @@ -962,9 +959,10 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, || userVm.getHypervisorType() == HypervisorType.KVM) { List activeSnapshots = _snapshotDao.listByInstanceId(volume.getInstanceId(), Snapshot.State.Creating, Snapshot.State.CreatedOnPrimary, Snapshot.State.BackingUp); - if (activeSnapshots.size() > 1) + if (activeSnapshots.size() > 1) { throw new CloudRuntimeException( "There is other active snapshot tasks on the instance to which the volume is attached, please try again later"); + } } List activeVMSnapshots = _vmSnapshotDao.listByInstanceId(userVm.getId(), diff --git a/server/src/com/cloud/template/S3SyncTask.java b/server/src/com/cloud/template/S3SyncTask.java deleted file mode 100644 index ed179dc8961..00000000000 --- a/server/src/com/cloud/template/S3SyncTask.java +++ /dev/null @@ -1,94 +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.template; - -import static java.lang.String.*; - -import java.util.List; - -import org.apache.log4j.Logger; - -import com.cloud.agent.api.to.S3TO; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.dao.VMTemplateDao; -import com.cloud.storage.s3.S3Manager; - -final class S3SyncTask implements Runnable { - - private static final Logger LOGGER = Logger.getLogger(S3SyncTask.class); - - private final VMTemplateDao vmTemplateDao; - private final S3Manager s3Mgr; - - S3SyncTask(final VMTemplateDao vmTemplateDao, final S3Manager s3Mgr) { - - super(); - - assert vmTemplateDao != null; - assert s3Mgr != null; - - this.vmTemplateDao = vmTemplateDao; - this.s3Mgr = s3Mgr; - - } - - @Override - public void run() { - - try { - - final S3TO s3 = s3Mgr.getS3TO(); - - if (s3 == null) { - LOGGER.warn("S3 sync skipped because no S3 instance is configured."); - return; - } - - final List candidateTemplates = vmTemplateDao - .findTemplatesToSyncToS3(); - - if (candidateTemplates.isEmpty()) { - LOGGER.debug("All templates are synced with S3."); - return; - } - - for (VMTemplateVO candidateTemplate : candidateTemplates) { - - if (LOGGER.isInfoEnabled()) { - LOGGER.info(format( - "Uploading template %1$s (id: %2$s) to S3.", - candidateTemplate.getName(), - candidateTemplate.getId())); - } - - s3Mgr.uploadTemplateToS3FromSecondaryStorage(candidateTemplate); - - } - - LOGGER.debug("Completed S3 template sync task."); - - } catch (Exception e) { - LOGGER.warn( - "S3 Sync Task ignored exception, and will continue to execute.", - e); - } - - } - -} diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java index b6e14b4e3f2..0d6a23a1e97 100755 --- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java +++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java @@ -71,9 +71,6 @@ import com.cloud.agent.api.CheckHealthCommand; import com.cloud.agent.api.Command; import com.cloud.agent.api.ComputeChecksumCommand; import com.cloud.agent.api.DeleteSnapshotsDirCommand; -import com.cloud.agent.api.DownloadSnapshotFromS3Command; -import com.cloud.agent.api.DownloadSnapshotFromSwiftCommand; -import com.cloud.agent.api.DownloadTemplateFromSwiftToSecondaryStorageCommand; import com.cloud.agent.api.GetStorageStatsAnswer; import com.cloud.agent.api.GetStorageStatsCommand; import com.cloud.agent.api.PingCommand; @@ -88,7 +85,6 @@ import com.cloud.agent.api.SecStorageSetupCommand.Certificates; import com.cloud.agent.api.SecStorageVMSetupCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupSecondaryStorageCommand; -import com.cloud.agent.api.UploadTemplateToSwiftFromSecondaryStorageCommand; import com.cloud.agent.api.to.DataObjectType; import com.cloud.agent.api.to.DataStoreTO; import com.cloud.agent.api.to.DataTO; @@ -198,16 +194,8 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S return execute((ListTemplateCommand) cmd); } else if (cmd instanceof ListVolumeCommand) { return execute((ListVolumeCommand) cmd); - } else if (cmd instanceof DownloadSnapshotFromSwiftCommand) { - return execute((DownloadSnapshotFromSwiftCommand) cmd); - } else if (cmd instanceof DownloadSnapshotFromS3Command) { - return execute((DownloadSnapshotFromS3Command) cmd); } else if (cmd instanceof DeleteSnapshotsDirCommand) { return execute((DeleteSnapshotsDirCommand) cmd); - } else if (cmd instanceof DownloadTemplateFromSwiftToSecondaryStorageCommand) { - return execute((DownloadTemplateFromSwiftToSecondaryStorageCommand) cmd); - } else if (cmd instanceof UploadTemplateToSwiftFromSecondaryStorageCommand) { - return execute((UploadTemplateToSwiftFromSecondaryStorageCommand) cmd); } else if (cmd instanceof CopyCommand) { return execute((CopyCommand) cmd); } else if (cmd instanceof DeleteCommand) { @@ -590,50 +578,6 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S return join(asList(getRootDir(storagePath), dataPath), File.separator); } - private Answer execute(DownloadTemplateFromSwiftToSecondaryStorageCommand cmd) { - SwiftTO swift = cmd.getSwift(); - String secondaryStorageUrl = cmd.getSecondaryStorageUrl(); - Long accountId = cmd.getAccountId(); - Long templateId = cmd.getTemplateId(); - String path = cmd.getPath(); - String errMsg; - String lDir = null; - try { - String parent = getRootDir(secondaryStorageUrl); - lDir = parent + "/template/tmpl/" + accountId.toString() + "/" + templateId.toString(); - String result = createLocalDir(lDir); - if (result != null) { - errMsg = "downloadTemplateFromSwiftToSecondaryStorageCommand failed due to Create local directory failed"; - s_logger.warn(errMsg); - throw new InternalErrorException(errMsg); - } - String lPath = lDir + "/" + path; - result = swiftDownload(swift, "T-" + templateId.toString(), path, lPath); - if (result != null) { - errMsg = "failed to download template " + path + " from Swift to secondary storage " + lPath - + " , err=" + result; - s_logger.warn(errMsg); - throw new CloudRuntimeException(errMsg); - } - path = "template.properties"; - lPath = lDir + "/" + path; - result = swiftDownload(swift, "T-" + templateId.toString(), path, lPath); - if (result != null) { - errMsg = "failed to download template " + path + " from Swift to secondary storage " + lPath - + " , err=" + result; - s_logger.warn(errMsg); - throw new CloudRuntimeException(errMsg); - } - return new Answer(cmd, true, "success"); - } catch (Exception e) { - if (lDir != null) { - deleteLocalDir(lDir); - } - errMsg = cmd + " Command failed due to " + e.toString(); - s_logger.warn(errMsg, e); - return new Answer(cmd, false, errMsg); - } - } protected File downloadFromUrlToNfs(String url, NfsTO nfs, String path, String name) { HttpClient client = new DefaultHttpClient(); @@ -732,33 +676,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S } - private Answer execute(UploadTemplateToSwiftFromSecondaryStorageCommand cmd) { - SwiftTO swift = cmd.getSwift(); - String secondaryStorageUrl = cmd.getSecondaryStorageUrl(); - Long accountId = cmd.getAccountId(); - Long templateId = cmd.getTemplateId(); - try { - String parent = getRootDir(secondaryStorageUrl); - String lPath = parent + "/template/tmpl/" + accountId.toString() + "/" + templateId.toString(); - if (!_storage.isFile(lPath + "/template.properties")) { - String errMsg = cmd + " Command failed due to template doesn't exist "; - s_logger.debug(errMsg); - return new Answer(cmd, false, errMsg); - } - String result = swiftUpload(swift, "T-" + templateId.toString(), lPath, "*"); - if (result != null) { - String errMsg = "failed to upload template from secondary storage " + lPath + " to swift , err=" - + result; - s_logger.debug(errMsg); - return new Answer(cmd, false, errMsg); - } - return new Answer(cmd, true, "success"); - } catch (Exception e) { - String errMsg = cmd + " Command failed due to " + e.toString(); - s_logger.warn(errMsg, e); - return new Answer(cmd, false, errMsg); - } - } + private ImageFormat getTemplateFormat(String filePath) { String ext = null; @@ -1063,73 +981,6 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S } } - public Answer execute(final DownloadSnapshotFromS3Command cmd) { - - final S3TO s3 = cmd.getS3(); - final String secondaryStorageUrl = cmd.getSecondaryStorageUrl(); - final Long accountId = cmd.getAccountId(); - final Long volumeId = cmd.getVolumeId(); - - try { - - executeWithNoWaitLock(determineSnapshotLockId(accountId, volumeId), new Callable() { - - @Override - public Void call() throws Exception { - - final String directoryName = determineSnapshotLocalDirectory(secondaryStorageUrl, accountId, - volumeId); - - String result = createLocalDir(directoryName); - if (result != null) { - throw new InternalErrorException(format( - "Failed to create directory %1$s during S3 snapshot download.", directoryName)); - } - - final String snapshotFileName = determineSnapshotBackupFilename(cmd.getSnapshotUuid()); - final String key = determineSnapshotS3Key(accountId, volumeId, snapshotFileName); - final File targetFile = S3Utils.getFile(s3, s3.getBucketName(), key, - _storage.getFile(directoryName), new FileNamingStrategy() { - - @Override - public String determineFileName(String key) { - return snapshotFileName; - } - - }); - - if (cmd.getParent() != null) { - - final String parentPath = join(File.pathSeparator, directoryName, - determineSnapshotBackupFilename(cmd.getParent())); - result = setVhdParent(targetFile.getAbsolutePath(), parentPath); - if (result != null) { - throw new InternalErrorException(format( - "Failed to set the parent for backup %1$s to %2$s due to %3$s.", - targetFile.getAbsolutePath(), parentPath, result)); - } - - } - - return null; - - } - - }); - - return new Answer(cmd, true, format( - "Succesfully retrieved volume id %1$s for account id %2$s to %3$s from S3.", volumeId, accountId, - secondaryStorageUrl)); - - } catch (Exception e) { - final String errMsg = format( - "Failed to retrieve volume id %1$s for account id %2$s to %3$s from S3 due to exception %4$s", - volumeId, accountId, secondaryStorageUrl, e.getMessage()); - s_logger.error(errMsg); - return new Answer(cmd, false, errMsg); - } - - } private String determineSnapshotS3Directory(final Long accountId, final Long volumeId) { return join(S3Utils.SEPARATOR, SNAPSHOT_ROOT_DIR, accountId, volumeId); @@ -1147,54 +998,6 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S return join(File.pathSeparator, getRootDir(secondaryStorageUrl), SNAPSHOT_ROOT_DIR, accountId, volumeId); } - public Answer execute(DownloadSnapshotFromSwiftCommand cmd) { - SwiftTO swift = cmd.getSwift(); - String secondaryStorageUrl = cmd.getSecondaryStorageUrl(); - Long accountId = cmd.getAccountId(); - Long volumeId = cmd.getVolumeId(); - String rFilename = cmd.getSnapshotUuid(); - String sParent = cmd.getParent(); - String errMsg = ""; - try { - String parent = getRootDir(secondaryStorageUrl); - String lPath = parent + "/snapshots/" + String.valueOf(accountId) + "/" + String.valueOf(volumeId); - - String result = createLocalDir(lPath); - if (result != null) { - errMsg = "downloadSnapshotFromSwiftCommand failed due to Create local path failed"; - s_logger.warn(errMsg); - throw new InternalErrorException(errMsg); - } - String lFilename = rFilename; - if (rFilename.startsWith("VHD-")) { - lFilename = rFilename.replace("VHD-", "") + ".vhd"; - } - String lFullPath = lPath + "/" + lFilename; - result = swiftDownload(swift, "S-" + volumeId.toString(), rFilename, lFullPath); - if (result != null) { - return new Answer(cmd, false, result); - } - if (sParent != null) { - if (sParent.startsWith("VHD-") || sParent.endsWith(".vhd")) { - String pFilename = sParent; - if (sParent.startsWith("VHD-")) { - pFilename = pFilename.replace("VHD-", "") + ".vhd"; - } - String pFullPath = lPath + "/" + pFilename; - result = setVhdParent(lFullPath, pFullPath); - if (result != null) { - return new Answer(cmd, false, result); - } - } - } - - return new Answer(cmd, true, "success"); - } catch (Exception e) { - String msg = cmd + " Command failed due to " + e.toString(); - s_logger.warn(msg, e); - throw new CloudRuntimeException(msg); - } - } private Answer execute(ComputeChecksumCommand cmd) {