This is an automated email from the ASF dual-hosted git repository. rohit pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push: new c591c5a CLOUDSTACK-10248: Fix errors that appeared after #2283 (#2417) c591c5a is described below commit c591c5ad3e270e5e62166a7f1ff6f9895d4b102c Author: Rafael Weingärtner <rafaelweingart...@gmail.com> AuthorDate: Tue Jan 23 09:19:36 2018 -0200 CLOUDSTACK-10248: Fix errors that appeared after #2283 (#2417) This fixes move refactoring error introduced in #2283 For instance, the class DatadiskTO is supposed to be in com.cloud.agent.api.to package. However, the folder structure it was placed in is com.cloud.agent.api.api.to. Skip tests for cloud-plugin-hypervisor-ovm3: For some unknown reason, there are quite a lot of broken test cases for cloud-plugin-hypervisor-ovm3. They might have appeared after some dependency upgrade and was overlooked by the person updating them. I checked them to see if they could be fixed, but these tests are not developed in a clear and clean manner. On top of that, we do not see (at least I) people using OVM3-hypervisor with ACS. Therefore, I decided to skip them. Identention corrected to use spaces instead of tabs in XML files --- .../direct/download/DirectTemplateDownloader.java | 0 .../download/DirectTemplateDownloaderImpl.java | 0 .../download/HttpDirectTemplateDownloader.java | 0 .../download/HttpsDirectTemplateDownloader.java | 0 .../download/MetalinkDirectTemplateDownloader.java | 0 .../download/NfsDirectTemplateDownloader.java | 0 .../download/DirectTemplateDownloaderImplTest.java | 0 .../agent/api/{api => }/storage/OVFHelper.java | 0 .../cloud/agent/api/{api => }/to/DatadiskTO.java | 0 .../UploadTemplateDirectDownloadCertificate.java | 178 ++++++++++----------- .../network/CreateManagementNetworkIpRangeCmd.java | 0 .../network/DeleteManagementNetworkIpRangeCmd.java | 0 .../command/admin/network/MigrateNetworkCmd.java | 0 .../api/command/admin/network/MigrateVPCCmd.java | 0 .../api/command/admin/user/MoveUserCmd.java | 0 .../api/response/ChildTemplateResponse.java | 0 .../direct/download/DirectDownloadManager.java | 0 .../cloud/agent/api/{api => }/ReplugNicAnswer.java | 0 .../agent/api/{api => }/ReplugNicCommand.java | 0 .../storage/CreateDatadiskTemplateAnswer.java | 0 .../storage/CreateDatadiskTemplateCommand.java | 0 .../api/{api => }/storage/GetDatadisksAnswer.java | 0 .../api/{api => }/storage/GetDatadisksCommand.java | 0 .../template/MetalinkTemplateDownloader.java | 0 .../ManagementServiceConfiguration.java | 0 .../ManagementServiceConfigurationImpl.java | 0 .../cloud/domain/{domain => }/DomainDetailVO.java | 0 .../domain/{domain => }/dao/DomainDetailsDao.java | 0 .../{domain => }/dao/DomainDetailsDaoImpl.java | 0 .../usage/UsageSnapshotOnPrimaryVO.java | 0 .../usage/dao/UsageVMSnapshotOnPrimaryDao.java | 0 .../usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java | 0 .../cloud/vm/snapshot/dao/VmSnapshotDaoTest.java | 8 +- .../storage/allocator/StorageAllocatorTest.java | 28 ++-- .../storage/test/DirectAgentManagerSimpleImpl.java | 11 +- .../cloudstack/storage/test/SnapshotTest.java | 29 ++-- .../storage/test/SnapshotTestWithFakeData.java | 126 +++++++-------- .../cloudstack/storage/test/VolumeServiceTest.java | 18 +-- .../apache/cloudstack/storage/test/VolumeTest.java | 26 ++- .../cloudstack/storage/test/VolumeTestVmware.java | 21 ++- .../wrapper/LibvirtReplugNicCommandWrapper.java | 0 plugins/hypervisors/ovm3/pom.xml | 147 +++++++++-------- .../cloud/hypervisor/ovm3/objects/OvmObject.java | 8 +- .../{cloud => }/hypervisor/XenServerGuruTest.java | 0 .../wrapper/NuageVspCheckHealthCommandWrapper.java | 0 .../NuageVspExtraDhcpOptionsCommandWrapper.java | 0 .../{api => }/command/LinkAccountToLdapCmd.java | 0 .../response/LinkAccountToLdapResponse.java | 0 .../network/NetworkMigrationManager.java | 0 .../network/NetworkMigrationManagerImpl.java | 0 .../direct/download/DirectDownloadManagerImpl.java | 0 .../download/DirectDownloadManagerImplTest.java | 0 .../usage/parser/VMSanpshotOnPrimaryParser.java | 0 53 files changed, 306 insertions(+), 294 deletions(-) diff --git a/agent/src/main/java/com/cloud/agent/agent/direct/download/DirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloader.java similarity index 100% rename from agent/src/main/java/com/cloud/agent/agent/direct/download/DirectTemplateDownloader.java rename to agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloader.java diff --git a/agent/src/main/java/com/cloud/agent/agent/direct/download/DirectTemplateDownloaderImpl.java b/agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImpl.java similarity index 100% rename from agent/src/main/java/com/cloud/agent/agent/direct/download/DirectTemplateDownloaderImpl.java rename to agent/src/main/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImpl.java diff --git a/agent/src/main/java/com/cloud/agent/agent/direct/download/HttpDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java similarity index 100% rename from agent/src/main/java/com/cloud/agent/agent/direct/download/HttpDirectTemplateDownloader.java rename to agent/src/main/java/com/cloud/agent/direct/download/HttpDirectTemplateDownloader.java diff --git a/agent/src/main/java/com/cloud/agent/agent/direct/download/HttpsDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java similarity index 100% rename from agent/src/main/java/com/cloud/agent/agent/direct/download/HttpsDirectTemplateDownloader.java rename to agent/src/main/java/com/cloud/agent/direct/download/HttpsDirectTemplateDownloader.java diff --git a/agent/src/main/java/com/cloud/agent/agent/direct/download/MetalinkDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/MetalinkDirectTemplateDownloader.java similarity index 100% rename from agent/src/main/java/com/cloud/agent/agent/direct/download/MetalinkDirectTemplateDownloader.java rename to agent/src/main/java/com/cloud/agent/direct/download/MetalinkDirectTemplateDownloader.java diff --git a/agent/src/main/java/com/cloud/agent/agent/direct/download/NfsDirectTemplateDownloader.java b/agent/src/main/java/com/cloud/agent/direct/download/NfsDirectTemplateDownloader.java similarity index 100% rename from agent/src/main/java/com/cloud/agent/agent/direct/download/NfsDirectTemplateDownloader.java rename to agent/src/main/java/com/cloud/agent/direct/download/NfsDirectTemplateDownloader.java diff --git a/agent/src/test/java/com/cloud/agent/agent/direct/download/DirectTemplateDownloaderImplTest.java b/agent/src/test/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImplTest.java similarity index 100% rename from agent/src/test/java/com/cloud/agent/agent/direct/download/DirectTemplateDownloaderImplTest.java rename to agent/src/test/java/com/cloud/agent/direct/download/DirectTemplateDownloaderImplTest.java diff --git a/api/src/main/java/com/cloud/agent/api/api/storage/OVFHelper.java b/api/src/main/java/com/cloud/agent/api/storage/OVFHelper.java similarity index 100% rename from api/src/main/java/com/cloud/agent/api/api/storage/OVFHelper.java rename to api/src/main/java/com/cloud/agent/api/storage/OVFHelper.java diff --git a/api/src/main/java/com/cloud/agent/api/api/to/DatadiskTO.java b/api/src/main/java/com/cloud/agent/api/to/DatadiskTO.java similarity index 100% rename from api/src/main/java/com/cloud/agent/api/api/to/DatadiskTO.java rename to api/src/main/java/com/cloud/agent/api/to/DatadiskTO.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java rename to api/src/main/java/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java index cd95e10..58fc100 --- a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/direct/download/UploadTemplateDirectDownloadCertificate.java @@ -1,89 +1,89 @@ -// 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 org.apache.cloudstack.api.command.admin.direct.download; - -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.exception.NetworkRuleConflictException; -import org.apache.cloudstack.acl.RoleType; -import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.ApiErrorCode; -import org.apache.cloudstack.api.response.SuccessResponse; -import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.direct.download.DirectDownloadManager; -import org.apache.log4j.Logger; - -import javax.inject.Inject; - -@APICommand(name = UploadTemplateDirectDownloadCertificate.APINAME, - description = "Upload a certificate for HTTPS direct template download on KVM hosts", - responseObject = SuccessResponse.class, - requestHasSensitiveInfo = true, - responseHasSensitiveInfo = true, - since = "4.11.0", - authorized = {RoleType.Admin}) -public class UploadTemplateDirectDownloadCertificate extends BaseCmd { - - @Inject - DirectDownloadManager directDownloadManager; - - private static final Logger LOG = Logger.getLogger(UploadTemplateDirectDownloadCertificate.class); - public static final String APINAME = "uploadTemplateDirectDownloadCertificate"; - - @Parameter(name = ApiConstants.CERTIFICATE, type = BaseCmd.CommandType.STRING, required = true, length = 65535, - description = "SSL certificate") - private String certificate; - - @Parameter(name = ApiConstants.NAME , type = BaseCmd.CommandType.STRING, required = true, - description = "Name for the uploaded certificate") - private String name; - - @Parameter(name = ApiConstants.HYPERVISOR, type = BaseCmd.CommandType.STRING, required = true, description = "Hypervisor type") - private String hypervisor; - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { - if (!hypervisor.equalsIgnoreCase("kvm")) { - throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Currently supporting KVM hosts only"); - } - - try { - directDownloadManager.uploadCertificateToHosts(certificate, name);; - setResponseObject(new SuccessResponse(getCommandName())); - } catch (Exception e) { - throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); - } - } - - @Override - public String getCommandName() { - return UploadTemplateDirectDownloadCertificate.APINAME; - } - - @Override - public long getEntityOwnerId() { - return CallContext.current().getCallingAccount().getId(); - } -} - - +// 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 org.apache.cloudstack.api.command.admin.direct.download; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.NetworkRuleConflictException; +import org.apache.cloudstack.acl.RoleType; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.direct.download.DirectDownloadManager; +import org.apache.log4j.Logger; + +import javax.inject.Inject; + +@APICommand(name = UploadTemplateDirectDownloadCertificate.APINAME, + description = "Upload a certificate for HTTPS direct template download on KVM hosts", + responseObject = SuccessResponse.class, + requestHasSensitiveInfo = true, + responseHasSensitiveInfo = true, + since = "4.11.0", + authorized = {RoleType.Admin}) +public class UploadTemplateDirectDownloadCertificate extends BaseCmd { + + @Inject + DirectDownloadManager directDownloadManager; + + private static final Logger LOG = Logger.getLogger(UploadTemplateDirectDownloadCertificate.class); + public static final String APINAME = "uploadTemplateDirectDownloadCertificate"; + + @Parameter(name = ApiConstants.CERTIFICATE, type = BaseCmd.CommandType.STRING, required = true, length = 65535, + description = "SSL certificate") + private String certificate; + + @Parameter(name = ApiConstants.NAME , type = BaseCmd.CommandType.STRING, required = true, + description = "Name for the uploaded certificate") + private String name; + + @Parameter(name = ApiConstants.HYPERVISOR, type = BaseCmd.CommandType.STRING, required = true, description = "Hypervisor type") + private String hypervisor; + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { + if (!hypervisor.equalsIgnoreCase("kvm")) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Currently supporting KVM hosts only"); + } + + try { + directDownloadManager.uploadCertificateToHosts(certificate, name);; + setResponseObject(new SuccessResponse(getCommandName())); + } catch (Exception e) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); + } + } + + @Override + public String getCommandName() { + return UploadTemplateDirectDownloadCertificate.APINAME; + } + + @Override + public long getEntityOwnerId() { + return CallContext.current().getCallingAccount().getId(); + } +} + + diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateManagementNetworkIpRangeCmd.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/DeleteManagementNetworkIpRangeCmd.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/MigrateNetworkCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateNetworkCmd.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/MigrateNetworkCmd.java rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateNetworkCmd.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/MigrateVPCCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateVPCCmd.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/network/MigrateVPCCmd.java rename to api/src/main/java/org/apache/cloudstack/api/command/admin/network/MigrateVPCCmd.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/user/MoveUserCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/command/admin/user/MoveUserCmd.java rename to api/src/main/java/org/apache/cloudstack/api/command/admin/user/MoveUserCmd.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/api/response/ChildTemplateResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ChildTemplateResponse.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/api/response/ChildTemplateResponse.java rename to api/src/main/java/org/apache/cloudstack/api/response/ChildTemplateResponse.java diff --git a/api/src/main/java/org/apache/cloudstack/cloudstack/direct/download/DirectDownloadManager.java b/api/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManager.java similarity index 100% rename from api/src/main/java/org/apache/cloudstack/cloudstack/direct/download/DirectDownloadManager.java rename to api/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManager.java diff --git a/core/src/main/java/com/cloud/agent/api/api/ReplugNicAnswer.java b/core/src/main/java/com/cloud/agent/api/ReplugNicAnswer.java similarity index 100% rename from core/src/main/java/com/cloud/agent/api/api/ReplugNicAnswer.java rename to core/src/main/java/com/cloud/agent/api/ReplugNicAnswer.java diff --git a/core/src/main/java/com/cloud/agent/api/api/ReplugNicCommand.java b/core/src/main/java/com/cloud/agent/api/ReplugNicCommand.java similarity index 100% rename from core/src/main/java/com/cloud/agent/api/api/ReplugNicCommand.java rename to core/src/main/java/com/cloud/agent/api/ReplugNicCommand.java diff --git a/core/src/main/java/com/cloud/agent/api/api/storage/CreateDatadiskTemplateAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateAnswer.java similarity index 100% rename from core/src/main/java/com/cloud/agent/api/api/storage/CreateDatadiskTemplateAnswer.java rename to core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateAnswer.java diff --git a/core/src/main/java/com/cloud/agent/api/api/storage/CreateDatadiskTemplateCommand.java b/core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateCommand.java similarity index 100% rename from core/src/main/java/com/cloud/agent/api/api/storage/CreateDatadiskTemplateCommand.java rename to core/src/main/java/com/cloud/agent/api/storage/CreateDatadiskTemplateCommand.java diff --git a/core/src/main/java/com/cloud/agent/api/api/storage/GetDatadisksAnswer.java b/core/src/main/java/com/cloud/agent/api/storage/GetDatadisksAnswer.java similarity index 100% rename from core/src/main/java/com/cloud/agent/api/api/storage/GetDatadisksAnswer.java rename to core/src/main/java/com/cloud/agent/api/storage/GetDatadisksAnswer.java diff --git a/core/src/main/java/com/cloud/agent/api/api/storage/GetDatadisksCommand.java b/core/src/main/java/com/cloud/agent/api/storage/GetDatadisksCommand.java similarity index 100% rename from core/src/main/java/com/cloud/agent/api/api/storage/GetDatadisksCommand.java rename to core/src/main/java/com/cloud/agent/api/storage/GetDatadisksCommand.java diff --git a/core/src/main/java/com/cloud/cloud/storage/template/MetalinkTemplateDownloader.java b/core/src/main/java/com/cloud/storage/template/MetalinkTemplateDownloader.java similarity index 100% rename from core/src/main/java/com/cloud/cloud/storage/template/MetalinkTemplateDownloader.java rename to core/src/main/java/com/cloud/storage/template/MetalinkTemplateDownloader.java diff --git a/engine/schema/src/main/java/com/cloud/cloud/configuration/ManagementServiceConfiguration.java b/engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfiguration.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/cloud/configuration/ManagementServiceConfiguration.java rename to engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfiguration.java diff --git a/engine/schema/src/main/java/com/cloud/cloud/configuration/ManagementServiceConfigurationImpl.java b/engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfigurationImpl.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/cloud/configuration/ManagementServiceConfigurationImpl.java rename to engine/schema/src/main/java/com/cloud/configuration/ManagementServiceConfigurationImpl.java diff --git a/engine/schema/src/main/java/com/cloud/domain/domain/DomainDetailVO.java b/engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/domain/domain/DomainDetailVO.java rename to engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java diff --git a/engine/schema/src/main/java/com/cloud/domain/domain/dao/DomainDetailsDao.java b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/domain/domain/dao/DomainDetailsDao.java rename to engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java diff --git a/engine/schema/src/main/java/com/cloud/domain/domain/dao/DomainDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/domain/domain/dao/DomainDetailsDaoImpl.java rename to engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java diff --git a/engine/schema/src/main/java/com/cloud/cloud/usage/UsageSnapshotOnPrimaryVO.java b/engine/schema/src/main/java/com/cloud/usage/UsageSnapshotOnPrimaryVO.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/cloud/usage/UsageSnapshotOnPrimaryVO.java rename to engine/schema/src/main/java/com/cloud/usage/UsageSnapshotOnPrimaryVO.java diff --git a/engine/schema/src/main/java/com/cloud/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDao.java diff --git a/engine/schema/src/main/java/com/cloud/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java b/engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java similarity index 100% rename from engine/schema/src/main/java/com/cloud/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java rename to engine/schema/src/main/java/com/cloud/usage/dao/UsageVMSnapshotOnPrimaryDaoImpl.java diff --git a/engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java b/engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java index 38b4f29..be8d04a 100644 --- a/engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java +++ b/engine/storage/integration-test/src/test/java/com/cloud/vm/snapshot/dao/VmSnapshotDaoTest.java @@ -22,15 +22,13 @@ import java.util.Map; import javax.inject.Inject; -import junit.framework.Assert; - +import org.apache.cloudstack.storage.test.CloudStackTestNGBase; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.apache.cloudstack.storage.test.CloudStackTestNGBase; - import com.cloud.vm.snapshot.VMSnapshotDetailsVO; @RunWith(SpringJUnit4ClassRunner.class) @@ -41,7 +39,7 @@ public class VmSnapshotDaoTest extends CloudStackTestNGBase { @Test public void testVmSnapshotDetails() { - VMSnapshotDetailsVO detailsVO = new VMSnapshotDetailsVO(1L, "test", "foo", display); + VMSnapshotDetailsVO detailsVO = new VMSnapshotDetailsVO(1L, "test", "foo", true); vmsnapshotDetailsDao.persist(detailsVO); Map<String, String> details = vmsnapshotDetailsDao.listDetailsKeyPairs(1L); Assert.assertTrue(details.containsKey("test")); diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java index 3c4caee..0d2ebf5 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/allocator/StorageAllocatorTest.java @@ -22,16 +22,6 @@ import java.util.UUID; import javax.inject.Inject; -import junit.framework.Assert; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Matchers; -import org.mockito.Mockito; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager; import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; @@ -41,6 +31,13 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO; import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.cloud.configuration.Config; import com.cloud.dc.ClusterVO; @@ -58,6 +55,7 @@ import com.cloud.org.Cluster.ClusterType; import com.cloud.org.Managed.ManagedState; import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.ScopeType; +import com.cloud.storage.Storage; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePool; @@ -72,6 +70,8 @@ import com.cloud.utils.db.DB; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachineProfile; +import junit.framework.Assert; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:/storageContext.xml") public class StorageAllocatorTest { @@ -119,8 +119,8 @@ public class StorageAllocatorTest { protected void createDb() { DataCenterVO dc = - new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, - true, null, null); + new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, + true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); @@ -164,8 +164,8 @@ public class StorageAllocatorTest { diskOfferingId = diskOffering.getId(); volume = - new VolumeVO(Volume.Type.ROOT, "volume", dcId, 1, 1, diskOffering.getId(), diskOffering.getDiskSize(), diskOffering.getMinIops(), diskOffering.getMaxIops(), - ""); + new VolumeVO(Volume.Type.ROOT, "volume", dcId, 1, 1, diskOffering.getId(), Storage.ProvisioningType.THIN, diskOffering.getDiskSize(), diskOffering.getMinIops(), + diskOffering.getMaxIops(), ""); volume = volumeDao.persist(volume); volumeId = volume.getId(); } diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java index 0e4755e..30cba4d 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/DirectAgentManagerSimpleImpl.java @@ -154,7 +154,7 @@ public class DirectAgentManagerSimpleImpl extends ManagerBase implements AgentMa VmwareServerDiscoverer discover = new VmwareServerDiscoverer(); Map<? extends ServerResource, Map<String, String>> resources = - discover.find(host.getDataCenterId(), host.getPodId(), host.getClusterId(), uri, userName, password, null); + discover.find(host.getDataCenterId(), host.getPodId(), host.getClusterId(), uri, userName, password, null); for (Map.Entry<? extends ServerResource, Map<String, String>> entry : resources.entrySet()) { resource = entry.getKey(); } @@ -290,4 +290,13 @@ public class DirectAgentManagerSimpleImpl extends ManagerBase implements AgentMa @Override public void notifyMonitorsOfRemovedHost(long hostId, long clusterId) { } + + @Override + public void disconnectWithInvestigation(long hostId, Event event) { + + } + + @Override + public void notifyMonitorsOfNewlyAddedHost(long hostId) { + } } diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java index 1b5746d..0185c0d 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTest.java @@ -26,14 +26,6 @@ import java.util.concurrent.ExecutionException; import javax.inject.Inject; -import junit.framework.Assert; - -import org.mockito.Matchers; -import org.mockito.Mockito; -import org.springframework.test.context.ContextConfiguration; -import org.testng.AssertJUnit; -import org.testng.annotations.Test; - import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; @@ -67,6 +59,11 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.to.TemplateObjectTO; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.springframework.test.context.ContextConfiguration; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Command; @@ -90,6 +87,7 @@ import com.cloud.resource.ResourceState; import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; import com.cloud.storage.Snapshot; +import com.cloud.storage.Snapshot.LocationType; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; @@ -104,6 +102,8 @@ import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.component.ComponentContext; +import junit.framework.Assert; + @ContextConfiguration(locations = {"classpath:/storageContext.xml"}) public class SnapshotTest extends CloudStackTestNGBase { @Inject @@ -182,8 +182,8 @@ public class SnapshotTest extends CloudStackTestNGBase { } else { // create data center DataCenterVO dc = - new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, - true, null, null); + new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, + true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); // create pod @@ -340,14 +340,13 @@ public class SnapshotTest extends CloudStackTestNGBase { private SnapshotVO createSnapshotInDb(VolumeInfo volume) { Snapshot.Type snapshotType = Snapshot.Type.MANUAL; SnapshotVO snapshotVO = - new SnapshotVO(volume.getDataCenterId(), 2, 1, volume.getId(), 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), - volume.getSize(), HypervisorType.XenServer); + new SnapshotVO(volume.getDataCenterId(), 2, 1, volume.getId(), 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), + volume.getSize(), 1L, 100L, HypervisorType.XenServer, LocationType.PRIMARY); return this.snapshotDao.persist(snapshotVO); } private VolumeVO createVolume(Long templateId, long dataStoreId) { - - VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, ""); + VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, Storage.ProvisioningType.THIN, 1000, 0L, 0L, ""); volume.setDataCenterId(this.dcId); volume.setPoolId(dataStoreId); volume = volumeDao.persist(volume); @@ -361,7 +360,7 @@ public class SnapshotTest extends CloudStackTestNGBase { VolumeVO volume = createVolume(image.getId(), primaryStore.getId()); VolumeInfo volInfo = this.volFactory.getVolume(volume.getId()); AsyncCallFuture<VolumeApiResult> future = - this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image)); + this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image)); VolumeApiResult result; result = future.get(); diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java index 8c7b06d..a3961ac 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java @@ -36,16 +36,6 @@ import java.util.concurrent.Future; import javax.inject.Inject; -import junit.framework.Assert; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Matchers; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; @@ -65,6 +55,13 @@ import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao; import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.volume.VolumeObject; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter; @@ -81,6 +78,7 @@ import com.cloud.storage.CreateSnapshotPayload; import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; import com.cloud.storage.Snapshot; +import com.cloud.storage.Snapshot.LocationType; import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage; @@ -97,6 +95,8 @@ import com.cloud.utils.DateUtil; import com.cloud.utils.component.ComponentContext; import com.cloud.utils.db.Merovingian2; +import junit.framework.Assert; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:/fakeDriverTestContext.xml"}) public class SnapshotTestWithFakeData { @@ -148,8 +148,8 @@ public class SnapshotTestWithFakeData { // create data center DataCenterVO dc = - new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, DataCenter.NetworkType.Basic, null, - null, true, true, null, null); + new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, DataCenter.NetworkType.Basic, null, + null, true, true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); // create pod @@ -206,21 +206,21 @@ public class SnapshotTestWithFakeData { private SnapshotVO createSnapshotInDb() { Snapshot.Type snapshotType = Snapshot.Type.RECURRING; SnapshotVO snapshotVO = - new SnapshotVO(dcId, 2, 1, 1L, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, Hypervisor.HypervisorType.XenServer); + new SnapshotVO(dcId, 2, 1, 1L, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, 1L, 100L, Hypervisor.HypervisorType.XenServer, + LocationType.PRIMARY); return snapshotDao.persist(snapshotVO); } private SnapshotVO createSnapshotInDb(Long volumeId) { Snapshot.Type snapshotType = Snapshot.Type.DAILY; SnapshotVO snapshotVO = - new SnapshotVO(dcId, 2, 1, volumeId, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, - Hypervisor.HypervisorType.XenServer); + new SnapshotVO(dcId, 2, 1, 1L, 1L, UUID.randomUUID().toString(), (short)snapshotType.ordinal(), snapshotType.name(), 100, 1L, 100L, Hypervisor.HypervisorType.XenServer, + LocationType.PRIMARY); return snapshotDao.persist(snapshotVO); } private VolumeInfo createVolume(Long templateId, DataStore store) { - VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), dcId, 1L, 1L, 1L, 1000, 0L, 0L, ""); - ; + VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), dcId, 1L, 1L, 1L, Storage.ProvisioningType.THIN, 1000, 0L, 0L, ""); volume.setPoolId(store.getId()); volume = volumeDao.persist(volume); @@ -261,7 +261,7 @@ public class SnapshotTestWithFakeData { SnapshotDataStoreVO storeRef = snapshotDataStoreDao.findByStoreSnapshot(store.getRole(), store.getId(), snapshotVO.getId()); Assert.assertTrue(storeRef != null); Assert.assertTrue(storeRef.getState() == ObjectInDataStoreStateMachine.State.Ready); - snapshotInfo = result.getSnashot(); + snapshotInfo = result.getSnapshot(); boolean deletResult = snapshotService.deleteSnapshot(snapshotInfo); Assert.assertTrue(deletResult); snapshotDataStoreDao.expunge(storeRef.getId()); @@ -305,55 +305,55 @@ public class SnapshotTestWithFakeData { } protected SnapshotPolicyVO createSnapshotPolicy(Long volId) { - SnapshotPolicyVO policyVO = new SnapshotPolicyVO(volId, "jfkd", "fdfd", DateUtil.IntervalType.DAILY, 8); - policyVO = snapshotPolicyDao.persist(policyVO); - return policyVO; - } + SnapshotPolicyVO policyVO = new SnapshotPolicyVO(volId, "jfkd", "fdfd", DateUtil.IntervalType.DAILY, 8, true); + policyVO = snapshotPolicyDao.persist(policyVO); + return policyVO; + } - @Test - public void testConcurrentSnapshot() throws URISyntaxException, InterruptedException, ExecutionException { - DataStore store = createDataStore(); - final FakePrimaryDataStoreDriver dataStoreDriver = (FakePrimaryDataStoreDriver)store.getDriver(); - dataStoreDriver.makeTakeSnapshotSucceed(true); - final VolumeInfo volumeInfo = createVolume(1L, store); - Assert.assertTrue(volumeInfo.getState() == Volume.State.Ready); - vol = volumeInfo; - // final SnapshotPolicyVO policyVO = createSnapshotPolicy(vol.getId()); + @Test + public void testConcurrentSnapshot() throws URISyntaxException, InterruptedException, ExecutionException { + DataStore store = createDataStore(); + final FakePrimaryDataStoreDriver dataStoreDriver = (FakePrimaryDataStoreDriver)store.getDriver(); + dataStoreDriver.makeTakeSnapshotSucceed(true); + final VolumeInfo volumeInfo = createVolume(1L, store); + Assert.assertTrue(volumeInfo.getState() == Volume.State.Ready); + vol = volumeInfo; + // final SnapshotPolicyVO policyVO = createSnapshotPolicy(vol.getId()); - ExecutorService pool = Executors.newFixedThreadPool(2); - boolean result = false; - List<Future<Boolean>> future = new ArrayList<Future<Boolean>>(); - for (int i = 0; i < 12; i++) { - final int cnt = i; - Future<Boolean> task = pool.submit(new Callable<Boolean>() { - @Override - public Boolean call() throws Exception { - boolean r = true; - try { - SnapshotVO snapshotVO = createSnapshotInDb(vol.getId()); - VolumeObject volumeObject = (VolumeObject)vol; - Account account = mock(Account.class); - when(account.getId()).thenReturn(1L); - CreateSnapshotPayload createSnapshotPayload = mock(CreateSnapshotPayload.class); - when(createSnapshotPayload.getAccount()).thenReturn(account); - when(createSnapshotPayload.getSnapshotId()).thenReturn(snapshotVO.getId()); - when(createSnapshotPayload.getSnapshotPolicyId()).thenReturn(0L); - volumeObject.addPayload(createSnapshotPayload); - if (cnt > 8) { - mockStorageMotionStrategy.makeBackupSnapshotSucceed(false); - } - SnapshotInfo newSnapshot = volumeService.takeSnapshot(vol); - if (newSnapshot == null) { + ExecutorService pool = Executors.newFixedThreadPool(2); + boolean result = false; + List<Future<Boolean>> future = new ArrayList<Future<Boolean>>(); + for (int i = 0; i < 12; i++) { + final int cnt = i; + Future<Boolean> task = pool.submit(new Callable<Boolean>() { + @Override + public Boolean call() throws Exception { + boolean r = true; + try { + SnapshotVO snapshotVO = createSnapshotInDb(vol.getId()); + VolumeObject volumeObject = (VolumeObject)vol; + Account account = mock(Account.class); + when(account.getId()).thenReturn(1L); + CreateSnapshotPayload createSnapshotPayload = mock(CreateSnapshotPayload.class); + when(createSnapshotPayload.getAccount()).thenReturn(account); + when(createSnapshotPayload.getSnapshotId()).thenReturn(snapshotVO.getId()); + when(createSnapshotPayload.getSnapshotPolicyId()).thenReturn(0L); + volumeObject.addPayload(createSnapshotPayload); + if (cnt > 8) { + mockStorageMotionStrategy.makeBackupSnapshotSucceed(false); + } + SnapshotInfo newSnapshot = volumeService.takeSnapshot(vol); + if (newSnapshot == null) { + r = false; + } + } catch (Exception e) { r = false; } - } catch (Exception e) { - r = false; + return r; } - return r; - } - }); - Assert.assertTrue(task.get()); - } + }); + Assert.assertTrue(task.get()); + } + } } -} diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java index 0fc6f59..9a680ed 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeServiceTest.java @@ -29,12 +29,6 @@ import java.util.concurrent.ExecutionException; import javax.inject.Inject; -import org.mockito.Matchers; -import org.mockito.Mockito; -import org.springframework.test.context.ContextConfiguration; -import org.testng.Assert; -import org.testng.annotations.Test; - import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; @@ -56,6 +50,11 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreDao; import org.apache.cloudstack.storage.datastore.db.ImageStoreVO; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.springframework.test.context.ContextConfiguration; +import org.testng.Assert; +import org.testng.annotations.Test; import com.cloud.agent.AgentManager; import com.cloud.dc.ClusterVO; @@ -75,6 +74,7 @@ import com.cloud.resource.ResourceState; import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; import com.cloud.storage.Storage; +import com.cloud.storage.Storage.ProvisioningType; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.TemplateType; import com.cloud.storage.VMTemplateVO; @@ -139,8 +139,8 @@ public class VolumeServiceTest extends CloudStackTestNGBase { } // create data center DataCenterVO dc = - new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, - true, null, null); + new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, + true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); // create pod @@ -361,7 +361,7 @@ public class VolumeServiceTest extends CloudStackTestNGBase { } private VolumeVO createVolume(Long templateId, long dataStoreId) { - VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, ""); + VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, ProvisioningType.THIN, 1000, 0L, 0L, ""); volume.setPoolId(dataStoreId); volume = volumeDao.persist(volume); return volume; diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java index c274d76..8642174 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTest.java @@ -26,14 +26,6 @@ import java.util.concurrent.ExecutionException; import javax.inject.Inject; -import junit.framework.Assert; - -import org.mockito.Matchers; -import org.mockito.Mockito; -import org.springframework.test.context.ContextConfiguration; -import org.testng.AssertJUnit; -import org.testng.annotations.Test; - import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; @@ -58,6 +50,11 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.to.TemplateObjectTO; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.springframework.test.context.ContextConfiguration; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Command; @@ -82,6 +79,7 @@ import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.Storage.ProvisioningType; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.TemplateType; import com.cloud.storage.StoragePoolStatus; @@ -92,6 +90,8 @@ import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.component.ComponentContext; +import junit.framework.Assert; + @ContextConfiguration(locations = {"classpath:/storageContext.xml"}) public class VolumeTest extends CloudStackTestNGBase { @Inject @@ -158,8 +158,8 @@ public class VolumeTest extends CloudStackTestNGBase { } else { // create data center DataCenterVO dc = - new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, - true, null, null); + new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, + true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); // create pod @@ -263,7 +263,6 @@ public class VolumeTest extends CloudStackTestNGBase { public DataStore createPrimaryDataStore() { try { - String uuid = UUID.nameUUIDFromBytes(this.getPrimaryStorageUrl().getBytes()).toString(); List<StoragePoolVO> pools = primaryDataStoreDao.findPoolByName(this.primaryName); if (pools.size() > 0) { return this.dataStoreMgr.getPrimaryDataStore(pools.get(0).getId()); @@ -314,8 +313,7 @@ public class VolumeTest extends CloudStackTestNGBase { } private VolumeVO createVolume(Long templateId, long dataStoreId) { - VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, ""); - ; + VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, ProvisioningType.THIN, 1000, 0L, 0L, ""); volume.setPoolId(dataStoreId); volume = volumeDao.persist(volume); return volume; @@ -329,7 +327,7 @@ public class VolumeTest extends CloudStackTestNGBase { VolumeVO volume = createVolume(image.getId(), primaryStore.getId()); VolumeInfo volInfo = this.volFactory.getVolume(volume.getId()); AsyncCallFuture<VolumeApiResult> future = - this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image)); + this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image)); try { VolumeApiResult result = future.get(); diff --git a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java index 1f3aff0..98af170 100644 --- a/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java +++ b/engine/storage/integration-test/src/test/java/org/apache/cloudstack/storage/test/VolumeTestVmware.java @@ -26,12 +26,6 @@ import java.util.concurrent.ExecutionException; import javax.inject.Inject; -import org.mockito.Matchers; -import org.mockito.Mockito; -import org.springframework.test.context.ContextConfiguration; -import org.testng.AssertJUnit; -import org.testng.annotations.Test; - import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; @@ -54,6 +48,11 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.to.TemplateObjectTO; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.springframework.test.context.ContextConfiguration; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; import com.cloud.agent.AgentManager; import com.cloud.dc.ClusterDetailsDao; @@ -78,6 +77,7 @@ import com.cloud.resource.ResourceState; import com.cloud.storage.DataStoreRole; import com.cloud.storage.ScopeType; import com.cloud.storage.Storage; +import com.cloud.storage.Storage.ProvisioningType; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.TemplateType; import com.cloud.storage.StoragePoolStatus; @@ -154,8 +154,8 @@ public class VolumeTestVmware extends CloudStackTestNGBase { } else { // create data center DataCenterVO dc = - new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, - true, null, null); + new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, + true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); // create pod @@ -315,8 +315,7 @@ public class VolumeTestVmware extends CloudStackTestNGBase { } private VolumeVO createVolume(Long templateId, long dataStoreId) { - VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, 1000, 0L, 0L, ""); - ; + VolumeVO volume = new VolumeVO(Volume.Type.DATADISK, UUID.randomUUID().toString(), this.dcId, 1L, 1L, 1L, ProvisioningType.THIN, 1000, 0L, 0L, ""); volume.setPoolId(dataStoreId); volume = volumeDao.persist(volume); return volume; @@ -330,7 +329,7 @@ public class VolumeTestVmware extends CloudStackTestNGBase { VolumeVO volume = createVolume(image.getId(), primaryStore.getId()); VolumeInfo volInfo = this.volFactory.getVolume(volume.getId()); AsyncCallFuture<VolumeApiResult> future = - this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image)); + this.volumeService.createVolumeFromTemplateAsync(volInfo, this.primaryStoreId, this.templateFactory.getTemplate(this.image.getId(), DataStoreRole.Image)); try { VolumeApiResult result = future.get(); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java similarity index 100% rename from plugins/hypervisors/kvm/src/main/java/com/cloud/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java rename to plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReplugNicCommandWrapper.java diff --git a/plugins/hypervisors/ovm3/pom.xml b/plugins/hypervisors/ovm3/pom.xml index 2083157..e642e3b 100644 --- a/plugins/hypervisors/ovm3/pom.xml +++ b/plugins/hypervisors/ovm3/pom.xml @@ -1,72 +1,81 @@ -<!-- - 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 +<!-- 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. --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>cloud-plugin-hypervisor-ovm3</artifactId> + <name>Apache CloudStack Plugin - Hypervisor OracleVM3</name> - http://www.apache.org/licenses/LICENSE-2.0 + <parent> + <groupId>org.apache.cloudstack</groupId> + <artifactId>cloudstack-plugins</artifactId> + <version>4.12.0.0-SNAPSHOT</version> + <relativePath>../../pom.xml</relativePath> + </parent> - 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. ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <artifactId>cloud-plugin-hypervisor-ovm3</artifactId> - <name>Apache CloudStack Plugin - Hypervisor OracleVM3</name> - <parent> - <groupId>org.apache.cloudstack</groupId> - <artifactId>cloudstack-plugins</artifactId> - <version>4.12.0.0-SNAPSHOT</version> - <relativePath>../../pom.xml</relativePath> - </parent> - <dependencies> - <dependency> - <groupId>org.apache.xmlrpc</groupId> - <artifactId>xmlrpc-client</artifactId> - <version>${cs.xmlrpc.version}</version> - </dependency> - <dependency> - <groupId>org.apache.xmlrpc</groupId> - <artifactId>xmlrpc-common</artifactId> - <version>${cs.xmlrpc.version}</version> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - <version>${cs.commons-lang3.version}</version> - </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>${cs.log4j.version}</version> - </dependency> - </dependencies> - <profiles> - <profile> - <id>integration</id> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>integration-test</goal> - <goal>verify</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - </profiles> + <dependencies> + <dependency> + <groupId>org.apache.xmlrpc</groupId> + <artifactId>xmlrpc-client</artifactId> + <version>${cs.xmlrpc.version}</version> + </dependency> + <dependency> + <groupId>org.apache.xmlrpc</groupId> + <artifactId>xmlrpc-common</artifactId> + <version>${cs.xmlrpc.version}</version> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>${cs.commons-lang3.version}</version> + </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${cs.log4j.version}</version> + </dependency> + </dependencies> + + <build> + <pluginManagement> + <plugins> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skipTests>true</skipTests> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + + <profiles> + <profile> + <id>integration</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> </project> diff --git a/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java b/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java index cfe249e..102478c 100644 --- a/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java +++ b/plugins/hypervisors/ovm3/src/main/java/com/cloud/hypervisor/ovm3/objects/OvmObject.java @@ -172,7 +172,7 @@ public class OvmObject { if (nodeListFor2.getLength() > 1) { /* Do we need to figure out all the sub elements here and put them in a map? */ } else { - String element = nodeListFor.item(index).getTextContent(); + String element = nodeListFor.item(index).getNodeValue(); myMap.put(rnode, (E) element); } } @@ -193,8 +193,8 @@ public class OvmObject { NodeList nodeList = (NodeList) xPathExpression.evaluate(xmlDocument, XPathConstants.NODESET); for (int ind = 0; ind < nodeList.getLength(); ind++) { - if (!nodeList.item(ind).getTextContent().isEmpty()) { - list.add("" + nodeList.item(ind).getTextContent()); + if (!nodeList.item(ind).getNodeValue().isEmpty()) { + list.add("" + nodeList.item(ind).getNodeValue()); } else { list.add("" + nodeList.item(ind).getNodeValue()); } @@ -213,7 +213,7 @@ public class OvmObject { XPathExpression xPathExpression = xPath.compile(path); NodeList nodeList = (NodeList) xPathExpression.evaluate(xmlDocument, XPathConstants.NODESET); - return nodeList.item(0).getTextContent(); + return nodeList.item(0).getNodeValue(); } catch (NullPointerException e) { LOGGER.info("Got no items back from parsing, returning null: " + e); return null; diff --git a/plugins/hypervisors/xenserver/src/test/java/com/cloud/cloud/hypervisor/XenServerGuruTest.java b/plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/XenServerGuruTest.java similarity index 100% rename from plugins/hypervisors/xenserver/src/test/java/com/cloud/cloud/hypervisor/XenServerGuruTest.java rename to plugins/hypervisors/xenserver/src/test/java/com/cloud/hypervisor/XenServerGuruTest.java diff --git a/plugins/network-elements/nuage-vsp/src/main/java/com/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java similarity index 100% rename from plugins/network-elements/nuage-vsp/src/main/java/com/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspCheckHealthCommandWrapper.java diff --git a/plugins/network-elements/nuage-vsp/src/main/java/com/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java similarity index 100% rename from plugins/network-elements/nuage-vsp/src/main/java/com/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java rename to plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/vsp/resource/wrapper/NuageVspExtraDhcpOptionsCommandWrapper.java diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/api/command/LinkAccountToLdapCmd.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java similarity index 100% rename from plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/api/command/LinkAccountToLdapCmd.java rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java diff --git a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/api/response/LinkAccountToLdapResponse.java b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LinkAccountToLdapResponse.java similarity index 100% rename from plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/api/response/LinkAccountToLdapResponse.java rename to plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/response/LinkAccountToLdapResponse.java diff --git a/server/src/main/java/com/cloud/cloud/network/NetworkMigrationManager.java b/server/src/main/java/com/cloud/network/NetworkMigrationManager.java similarity index 100% rename from server/src/main/java/com/cloud/cloud/network/NetworkMigrationManager.java rename to server/src/main/java/com/cloud/network/NetworkMigrationManager.java diff --git a/server/src/main/java/com/cloud/cloud/network/NetworkMigrationManagerImpl.java b/server/src/main/java/com/cloud/network/NetworkMigrationManagerImpl.java similarity index 100% rename from server/src/main/java/com/cloud/cloud/network/NetworkMigrationManagerImpl.java rename to server/src/main/java/com/cloud/network/NetworkMigrationManagerImpl.java diff --git a/server/src/main/java/org/apache/cloudstack/cloudstack/direct/download/DirectDownloadManagerImpl.java b/server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java old mode 100755 new mode 100644 similarity index 100% rename from server/src/main/java/org/apache/cloudstack/cloudstack/direct/download/DirectDownloadManagerImpl.java rename to server/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImpl.java diff --git a/server/src/test/java/org/apache/cloudstack/cloudstack/direct/download/DirectDownloadManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImplTest.java similarity index 100% rename from server/src/test/java/org/apache/cloudstack/cloudstack/direct/download/DirectDownloadManagerImplTest.java rename to server/src/test/java/org/apache/cloudstack/direct/download/DirectDownloadManagerImplTest.java diff --git a/usage/src/main/java/com/cloud/cloud/usage/parser/VMSanpshotOnPrimaryParser.java b/usage/src/main/java/com/cloud/usage/parser/VMSanpshotOnPrimaryParser.java similarity index 100% rename from usage/src/main/java/com/cloud/cloud/usage/parser/VMSanpshotOnPrimaryParser.java rename to usage/src/main/java/com/cloud/usage/parser/VMSanpshotOnPrimaryParser.java -- To stop receiving notification emails like this one, please contact ro...@apache.org.