From issues-return-88669-archive-asf-public=cust-asf.ponee.io@cloudstack.apache.org Mon Jan 8 08:35:09 2018 Return-Path: X-Original-To: archive-asf-public@eu.ponee.io Delivered-To: archive-asf-public@eu.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by mx-eu-01.ponee.io (Postfix) with ESMTP id C49AF180607 for ; Mon, 8 Jan 2018 08:35:09 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id B4C88160C2C; Mon, 8 Jan 2018 07:35:09 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 382BA160C1E for ; Mon, 8 Jan 2018 08:35:08 +0100 (CET) Received: (qmail 71386 invoked by uid 500); 8 Jan 2018 07:35:07 -0000 Mailing-List: contact issues-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list issues@cloudstack.apache.org Received: (qmail 71377 invoked by uid 500); 8 Jan 2018 07:35:07 -0000 Delivered-To: apmail-incubator-cloudstack-issues@incubator.apache.org Received: (qmail 71374 invoked by uid 99); 8 Jan 2018 07:35:07 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Jan 2018 07:35:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id CAC381A0C4E for ; Mon, 8 Jan 2018 07:35:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -99.911 X-Spam-Level: X-Spam-Status: No, score=-99.911 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id hqLjnd72IZ8m for ; Mon, 8 Jan 2018 07:35:01 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 514365FB16 for ; Mon, 8 Jan 2018 07:35:01 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id D271DE0F4F for ; Mon, 8 Jan 2018 07:35:00 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 7F921240EE for ; Mon, 8 Jan 2018 07:35:00 +0000 (UTC) Date: Mon, 8 Jan 2018 07:35:00 +0000 (UTC) From: "ASF GitHub Bot (JIRA)" To: cloudstack-issues@incubator.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CLOUDSTACK-10178) Hotfixes to make 4.10 work MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/CLOUDSTACK-10178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16315784#comment-16315784 ] ASF GitHub Bot commented on CLOUDSTACK-10178: --------------------------------------------- bwsw closed pull request #2320: CLOUDSTACK-10178: Hotfixes to make 4.10 work URL: https://github.com/apache/cloudstack/pull/2320 This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/core/src/com/cloud/storage/template/TemplateLocation.java b/core/src/com/cloud/storage/template/TemplateLocation.java index e52a635dc68..d10d05ae971 100644 --- a/core/src/com/cloud/storage/template/TemplateLocation.java +++ b/core/src/com/cloud/storage/template/TemplateLocation.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.Properties; +import java.util.Arrays; import org.apache.log4j.Logger; @@ -81,12 +82,12 @@ public boolean purge() { boolean purged = true; String[] files = _storage.listFiles(_templatePath); for (String file : files) { - boolean r = _storage.delete(file); - if (!r) { + boolean isRemoved = _storage.delete(file); + if (!isRemoved) { purged = false; } if (s_logger.isDebugEnabled()) { - s_logger.debug((r ? "R" : "Unable to r") + "emove " + file); + s_logger.debug((isRemoved ? "Removed " : "Unable to remove") + file); } } @@ -97,43 +98,60 @@ public boolean load() throws IOException { try (FileInputStream strm = new FileInputStream(_file);) { _props.load(strm); } catch (IOException e) { - s_logger.warn("Unable to load the template properties", e); + s_logger.warn("Unable to load the template properties for '" + _file + "': ", e); } for (ImageFormat format : ImageFormat.values()) { - String ext = _props.getProperty(format.getFileExtension()); + String currentExtension = format.getFileExtension(); + String ext = _props.getProperty(currentExtension); if (ext != null) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("File extension '" + currentExtension + "' was found in '" + _file + "'."); + } FormatInfo info = new FormatInfo(); info.format = format; - info.filename = _props.getProperty(format.getFileExtension() + ".filename"); + info.filename = _props.getProperty(currentExtension + ".filename"); if (info.filename == null) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Property '" + currentExtension + ".filename' was not found in '" + _file + "'. Current format is ignored."); + } continue; } - info.size = NumbersUtil.parseLong(_props.getProperty(format.getFileExtension() + ".size"), -1); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Property '" + currentExtension + ".filename' was found in '" + _file + "'. Current format will be parsed."); + } + info.size = NumbersUtil.parseLong(_props.getProperty(currentExtension + ".size"), -1); _props.setProperty("physicalSize", Long.toString(info.size)); - info.virtualSize = NumbersUtil.parseLong(_props.getProperty(format.getFileExtension() + ".virtualsize"), -1); + info.virtualSize = NumbersUtil.parseLong(_props.getProperty(currentExtension + ".virtualsize"), -1); _formats.add(info); if (!checkFormatValidity(info)) { _isCorrupted = true; s_logger.warn("Cleaning up inconsistent information for " + format); } + } else { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Format extension '" + currentExtension + "' wasn't found in '" + _file + "'."); + } } } if (_props.getProperty("uniquename") == null || _props.getProperty("virtualsize") == null) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Property 'uniquename' or 'virtualsize' weren't found in '" + _file + "'. Loading failed."); + } return false; } - return (_formats.size() > 0); } public boolean save() { for (FormatInfo info : _formats) { - _props.setProperty(info.format.getFileExtension(), "true"); - _props.setProperty(info.format.getFileExtension() + ".filename", info.filename); - _props.setProperty(info.format.getFileExtension() + ".size", Long.toString(info.size)); - _props.setProperty(info.format.getFileExtension() + ".virtualsize", Long.toString(info.virtualSize)); + String formatExtension = info.format.getFileExtension(); + _props.setProperty(formatExtension, "true"); + _props.setProperty(formatExtension + ".filename", info.filename); + _props.setProperty(formatExtension + ".size", Long.toString(info.size)); + _props.setProperty(formatExtension + ".virtualsize", Long.toString(info.virtualSize)); } try (FileOutputStream strm = new FileOutputStream(_file);) { _props.store(strm, ""); @@ -205,10 +223,11 @@ protected FormatInfo deleteFormat(ImageFormat format) { FormatInfo info = it.next(); if (info.format == format) { it.remove(); - _props.remove(format.getFileExtension()); - _props.remove(format.getFileExtension() + ".filename"); - _props.remove(format.getFileExtension() + ".size"); - _props.remove(format.getFileExtension() + ".virtualsize"); + String formatExtension = format.getFileExtension(); + _props.remove(formatExtension); + for(String propertySuffix : Arrays.asList("filename","size","virtualsize")) { + _props.remove(formatExtension + "." + propertySuffix); + } return info; } } diff --git a/debian/cloudstack-agent.postinst b/debian/cloudstack-agent.postinst index 9cb178d4f12..a9b8b687fab 100644 --- a/debian/cloudstack-agent.postinst +++ b/debian/cloudstack-agent.postinst @@ -35,6 +35,15 @@ case "$1" in done fi + BR_NETFILTER_MODULE=br_netfilter + MODULES_FILE=/etc/modules + if /sbin/modinfo $BR_NETFILTER_MODULE >/dev/null 2>&1; then + /sbin/modprobe $BR_NETFILTER_MODULE + if ! grep $BR_NETFILTER_MODULE $MODULES_FILE >/dev/null 2>&1; then + echo "$BR_NETFILTER_MODULE" >> $MODULES_FILE + fi + fi + # Running cloudstack-agent-upgrade to update bridge name for upgrade from CloudStack 4.0.x (and before) to CloudStack 4.1 (and later) /usr/bin/cloudstack-agent-upgrade if [ ! -d "/etc/libvirt/hooks" ] ; then diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 8cc8de12433..122f550474b 100755 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -2572,9 +2572,7 @@ protected void runInContext() { s_logger.trace("VM Operation Thread Running"); try { _workDao.cleanup(VmOpCleanupWait.value()); - - // TODO. hard-coded to one hour after job has been completed - final Date cutDate = new Date(new Date().getTime() - 3600000); + final Date cutDate = new Date(DateUtil.currentGMTTime().getTime() - VmOpCleanupInterval.value() * 1000); _workJobDao.expungeCompletedWorkJobs(cutDate); } catch (final Exception e) { s_logger.error("VM Operations failed due to ", e); @@ -2944,7 +2942,7 @@ protected void runInContext() { try { scanStalledVMInTransitionStateOnDisconnectedHosts(); - final List instances = _vmDao.findVMInTransition(new Date(new Date().getTime() - AgentManager.Wait.value() * 1000), State.Starting, State.Stopping); + final List instances = _vmDao.findVMInTransition(new Date(DateUtil.currentGMTTime().getTime() - AgentManager.Wait.value() * 1000), State.Starting, State.Stopping); for (final VMInstanceVO instance : instances) { final State state = instance.getState(); if (state == State.Stopping) { diff --git a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java b/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java index 5748de58965..76a68cf7f0e 100644 --- a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java +++ b/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java @@ -16,15 +16,22 @@ //under the License. package org.apache.cloudstack.api.response; -import com.cloud.domain.DomainVO; -import com.cloud.domain.dao.DomainDao; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.user.Account; -import com.cloud.user.AccountManager; -import com.cloud.user.AccountVO; -import com.cloud.user.User; -import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserDao; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +import javax.inject.Inject; import org.apache.cloudstack.api.command.QuotaBalanceCmd; import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd; @@ -53,24 +60,17 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import javax.ejb.Local; -import javax.inject.Inject; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountVO; +import com.cloud.user.User; +import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.UserDao; @Component -@Local(value = QuotaResponseBuilderImpl.class) public class QuotaResponseBuilderImpl implements QuotaResponseBuilder { private static final Logger s_logger = Logger.getLogger(QuotaResponseBuilderImpl.class); @@ -141,7 +141,9 @@ public QuotaTariffResponse createQuotaTariffResponse(QuotaTariffVO tariff) { } else { for (final QuotaAccountVO quotaAccount : _quotaAccountDao.listAllQuotaAccount()) { AccountVO account = _accountDao.findById(quotaAccount.getId()); - if (account == null) continue; + if (account == null) { + continue; + } QuotaSummaryResponse qr = getQuotaSummaryResponse(account); result.add(qr); } @@ -181,6 +183,7 @@ public QuotaBalanceResponse createQuotaBalanceResponse(List quot throw new InvalidParameterValueException("The request period does not contain balance entries."); } Collections.sort(quotaBalance, new Comparator() { + @Override public int compare(QuotaBalanceVO o1, QuotaBalanceVO o2) { o1 = o1 == null ? new QuotaBalanceVO() : o1; o2 = o2 == null ? new QuotaBalanceVO() : o2; @@ -287,13 +290,15 @@ public QuotaStatementResponse createQuotaStatementResponse(final List