diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index e6c578c5a9a..223f3453c21 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -786,8 +786,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 39858905e46..46fd808669d 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -31,7 +31,6 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import com.cloud.dc.*; -import com.cloud.server.ConfigurationServer; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -48,9 +47,6 @@ import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import org.apache.cloudstack.region.dao.RegionDao; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - import com.cloud.agent.AgentManager; import com.cloud.agent.AgentManager.TapAgentsAction; import com.cloud.agent.api.Answer; @@ -129,7 +125,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; @@ -189,8 +184,6 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, @Inject protected HostDao _hostDao; @Inject - protected S3Manager _s3Mgr; - @Inject protected HostDetailsDao _hostDetailsDao; @Inject protected ConfigurationDao _configDao; @@ -543,8 +536,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; } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 996c6937282..b90617839ac 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -501,7 +501,6 @@ import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.UploadDao; 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.storage.upload.UploadMonitor; @@ -672,10 +671,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 580578f139b..d7e44689d06 100644 --- a/server/src/com/cloud/storage/VolumeManagerImpl.java +++ b/server/src/com/cloud/storage/VolumeManagerImpl.java @@ -32,8 +32,6 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import com.cloud.utils.*; -import org.apache.commons.lang.StringUtils; - import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -142,7 +140,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; @@ -234,8 +231,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 1300f02855d..2b291d3538a 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -58,7 +58,6 @@ import com.cloud.configuration.Config; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterVO; -import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.domain.dao.DomainDao; @@ -99,7 +98,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; @@ -180,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; @@ -615,7 +611,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, } if (snapshotTypeStr != null) { - Type snapshotType = SnapshotVO.getSnapshotType((String) snapshotTypeStr); + Type snapshotType = SnapshotVO.getSnapshotType(snapshotTypeStr); if (snapshotType == null) { throw new InvalidParameterValueException("Unsupported snapshot type " + snapshotTypeStr); } @@ -625,7 +621,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, sc.setParameters("snapshotTypeEQ", snapshotType.ordinal()); } } else if (intervalTypeStr != null && volumeId != null) { - Type type = SnapshotVO.getSnapshotType((String) intervalTypeStr); + Type type = SnapshotVO.getSnapshotType(intervalTypeStr); if (type == null) { throw new InvalidParameterValueException("Unsupported snapstho interval type " + intervalTypeStr); } @@ -963,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) {