Yes David. Fix can go into 4.0 branch also. Wei Zhou, Would you be able to port these changes to 4.0 branch?
> -----Original Message----- > From: David Nalley [mailto:da...@gnsa.us] > Sent: Tuesday, 26 February 2013 8:35 PM > To: cloudstack-dev@incubator.apache.org > Cc: cloudstack-comm...@incubator.apache.org > Subject: Re: git commit: refs/heads/4.1 - CLOUDSTACK- > 962:setAggBytesSent/setAggBytesReceived in NetworkUsageTask when not > in case of dailyor hourly Removed duplicate userstatsdao injection > > Kishan: Is there a reason this wasn't also added to 4.0 branch (it was filed > against 4.0.0, but only applied to 4.1 and master) > > --David > > On Tue, Feb 26, 2013 at 5:57 AM, <kis...@apache.org> wrote: > > Updated Branches: > > refs/heads/4.1 c7935a9ab -> 03fdbfb29 > > > > > > CLOUDSTACK-962:setAggBytesSent/setAggBytesReceived in > NetworkUsageTask > > when not in case of dailyor hourly Removed duplicate userstatsdao > > injection > > > > > > Project: > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo > > Commit: > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/03f > > dbfb2 > > Tree: > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/03fdb > > fb2 > > Diff: > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/03fdb > > fb2 > > > > Branch: refs/heads/4.1 > > Commit: 03fdbfb29193885830de90edcbb6f71bd0baf487 > > Parents: c7935a9 > > Author: Wei Zhou <w.z...@leaseweb.com> > > Authored: Tue Feb 26 16:25:03 2013 +0530 > > Committer: Kishan Kavala <kis...@cloud.com> > > Committed: Tue Feb 26 16:26:30 2013 +0530 > > > > ---------------------------------------------------------------------- > > .../router/VirtualNetworkApplianceManagerImpl.java | 33 ++++++++++-- > -- > > .../com/cloud/user/dao/UserStatisticsDaoImpl.java | 18 ++++---- > > usage/src/com/cloud/usage/UsageManagerImpl.java | 2 +- > > 3 files changed, 33 insertions(+), 20 deletions(-) > > ---------------------------------------------------------------------- > > > > > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/03fdb > > > fb2/server/src/com/cloud/network/router/VirtualNetworkApplianceManag > er > > Impl.java > > ---------------------------------------------------------------------- > > diff --git > > > a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerI > m > > pl.java > > > b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerI > m > > pl.java > > index 980d482..abb4973 100755 > > --- > > > a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerI > m > > pl.java > > +++ > b/server/src/com/cloud/network/router/VirtualNetworkApplianceManag > > +++ erImpl.java > > @@ -293,8 +293,6 @@ public class VirtualNetworkApplianceManagerImpl > extends ManagerBase implements V > > UserVmDao _userVmDao; > > @Inject VMInstanceDao _vmDao; > > @Inject > > - UserStatisticsDao _statsDao = null; > > - @Inject > > NetworkOfferingDao _networkOfferingDao = null; > > @Inject > > GuestOSDao _guestOSDao = null; > > @@ -364,7 +362,9 @@ public class VirtualNetworkApplianceManagerImpl > extends ManagerBase implements V > > private String _usageTimeZone = "GMT"; > > private final long mgmtSrvrId = MacAddress.getMacAddress().toLong(); > > private static final int > ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 5; // 5 seconds > > - > > + private static final int USAGE_AGGREGATION_RANGE_MIN = 10; // 10 > minutes, same as > com.cloud.usage.UsageManagerImpl.USAGE_AGGREGATION_RANGE_MIN > > + private boolean _dailyOrHourly = false; > > + > > ScheduledExecutorService _executor; > > ScheduledExecutorService _checkExecutor; > > ScheduledExecutorService _networkStatsUpdateExecutor; @@ -728,6 > > +728,7 @@ public class VirtualNetworkApplianceManagerImpl extends > ManagerBase implements V > > cal.roll(Calendar.DAY_OF_YEAR, true); > > cal.add(Calendar.MILLISECOND, -1); > > endDate = cal.getTime().getTime(); > > + _dailyOrHourly = true; > > } else if (_usageAggregationRange == HOURLY_TIME) { > > cal.roll(Calendar.HOUR_OF_DAY, false); > > cal.set(Calendar.MINUTE, 0); @@ -736,8 +737,15 @@ public > > class VirtualNetworkApplianceManagerImpl extends ManagerBase > implements V > > cal.roll(Calendar.HOUR_OF_DAY, true); > > cal.add(Calendar.MILLISECOND, -1); > > endDate = cal.getTime().getTime(); > > + _dailyOrHourly = true; > > } else { > > endDate = cal.getTime().getTime(); > > + _dailyOrHourly = false; > > + } > > + > > + if (_usageAggregationRange < USAGE_AGGREGATION_RANGE_MIN) > { > > + s_logger.warn("Usage stats job aggregation range is to small, > > using > the minimum value of " + USAGE_AGGREGATION_RANGE_MIN); > > + _usageAggregationRange = USAGE_AGGREGATION_RANGE_MIN; > > } > > > > _networkStatsUpdateExecutor.scheduleAtFixedRate(new > > NetworkStatsUpdateTask(), (endDate - System.currentTimeMillis()), @@ - > 854,7 +862,7 @@ public class VirtualNetworkApplianceManagerImpl extends > ManagerBase implements V > > final NetworkUsageCommand usageCmd = new > NetworkUsageCommand(privateIP, router.getHostName(), > > forVpc, routerNic.getIp4Address()); > > String routerType = > > router.getType().toString(); > > - UserStatisticsVO previousStats = > _statsDao.findBy(router.getAccountId(), > > + UserStatisticsVO previousStats = > > + _userStatsDao.findBy(router.getAccountId(), > > router.getDataCenterId(), > > network.getId(), (forVpc ? > routerNic.getIp4Address() : null), router.getId(), routerType); > > NetworkUsageAnswer answer = null; > > try { @@ -876,7 +884,7 @@ public > > class VirtualNetworkApplianceManagerImpl extends ManagerBase > implements V > > continue; > > } > > txn.start(); > > - UserStatisticsVO stats = > _statsDao.lock(router.getAccountId(), > > + UserStatisticsVO stats = > > + _userStatsDao.lock(router.getAccountId(), > > router.getDataCenterId(), > > network.getId(), > (forVpc ? routerNic.getIp4Address() : null), router.getId(), routerType); > > if (stats == null) { > > s_logger.warn("unable to > > find stats for account: " + router.getAccountId()); @@ -912,7 +920,12 @@ > public class VirtualNetworkApplianceManagerImpl extends ManagerBase > implements V > > > > stats.setNetBytesSent(stats.getNetBytesSent() + > stats.getCurrentBytesSent()); > > } > > > > stats.setCurrentBytesSent(answer.getBytesSent()); > > - _statsDao.update(stats.getId(), > > stats); > > + if (! _dailyOrHourly) { > > + //update agg bytes > > + > > stats.setAggBytesSent(stats.getNetBytesSent() + > stats.getCurrentBytesSent()); > > + > stats.setAggBytesReceived(stats.getNetBytesReceived() + > stats.getCurrentBytesReceived()); > > + } > > + > > + _userStatsDao.update(stats.getId(), stats); > > txn.commit(); > > } catch (Exception e) { > > txn.rollback(); @@ -954,7 > > +967,7 @@ public class VirtualNetworkApplianceManagerImpl extends > ManagerBase implements V > > try { > > txn.start(); > > //get all stats with delta > 0 > > - List<UserStatisticsVO> updatedStats = > _statsDao.listUpdatedStats(); > > + List<UserStatisticsVO> updatedStats = > > + _userStatsDao.listUpdatedStats(); > > Date updatedTime = new Date(); > > for(UserStatisticsVO stat : updatedStats){ > > //update agg bytes @@ -3598,7 +3611,7 @@ > > public class VirtualNetworkApplianceManagerImpl extends ManagerBase > implements V > > boolean forVpc = router.getVpcId() != null; > > final NetworkUsageCommand usageCmd = new > NetworkUsageCommand(privateIP, router.getHostName(), > > forVpc, routerNic.getIp4Address()); > > - UserStatisticsVO previousStats = > _statsDao.findBy(router.getAccountId(), > > + UserStatisticsVO previousStats = > > + _userStatsDao.findBy(router.getAccountId(), > > router.getDataCenterId(), network.getId(), > > null, > router.getId(), router.getType().toString()); > > NetworkUsageAnswer answer = null; > > try { > > @@ -3620,7 +3633,7 @@ public class > VirtualNetworkApplianceManagerImpl extends ManagerBase implements V > > continue; > > } > > txn.start(); > > - UserStatisticsVO stats = > _statsDao.lock(router.getAccountId(), > > + UserStatisticsVO stats = > > + _userStatsDao.lock(router.getAccountId(), > > router.getDataCenterId(), > > network.getId(), null, > router.getId(), router.getType().toString()); > > if (stats == null) { > > s_logger.warn("unable to find stats > > for account: " + router.getAccountId()); @@ -3656,7 +3669,7 @@ public > class VirtualNetworkApplianceManagerImpl extends ManagerBase > implements V > > > > stats.setNetBytesSent(stats.getNetBytesSent() + > stats.getCurrentBytesSent()); > > } > > > > stats.setCurrentBytesSent(answer.getBytesSent()); > > - _statsDao.update(stats.getId(), stats); > > + _userStatsDao.update(stats.getId(), > > + stats); > > txn.commit(); > > } catch (Exception e) { > > txn.rollback(); > > > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/03fdb > > fb2/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java > > ---------------------------------------------------------------------- > > diff --git a/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java > > b/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java > > index 913ec07..4a1a51c 100644 > > --- a/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java > > +++ b/server/src/com/cloud/user/dao/UserStatisticsDaoImpl.java > > @@ -44,17 +44,17 @@ public class UserStatisticsDaoImpl extends > GenericDaoBase<UserStatisticsVO, Long > > > > "WHERE us.account_id = a.id AND > (a.removed IS NULL OR a.removed >= ?) " + > > > > "ORDER BY us.id"; > > private static final String UPDATED_STATS_SEARCH = "SELECT id, > current_bytes_received, current_bytes_sent, net_bytes_received, > net_bytes_sent, agg_bytes_received, agg_bytes_sent from user_statistics " > + > > - > > "where > (agg_bytes_received < net_bytes_received + current_bytes_received) OR > (agg_bytes_sent < net_bytes_sent + current_bytes_sent)"; > > + > > + "where (agg_bytes_received < net_bytes_received + > > + current_bytes_received) OR (agg_bytes_sent < net_bytes_sent + > > + current_bytes_sent)"; > > private final SearchBuilder<UserStatisticsVO> AllFieldsSearch; > > private final SearchBuilder<UserStatisticsVO> AccountSearch; > > - > > - > > + > > + > > public UserStatisticsDaoImpl() { > > - AccountSearch = createSearchBuilder(); > > - AccountSearch.and("account", AccountSearch.entity().getAccountId(), > SearchCriteria.Op.EQ); > > - AccountSearch.done(); > > + AccountSearch = createSearchBuilder(); > > + AccountSearch.and("account", AccountSearch.entity().getAccountId(), > SearchCriteria.Op.EQ); > > + AccountSearch.done(); > > > > - AllFieldsSearch = createSearchBuilder(); > > + AllFieldsSearch = createSearchBuilder(); > > AllFieldsSearch.and("account", > > AllFieldsSearch.entity().getAccountId(), > SearchCriteria.Op.EQ); > > AllFieldsSearch.and("dc", > > AllFieldsSearch.entity().getDataCenterId(), > SearchCriteria.Op.EQ); > > AllFieldsSearch.and("network", > > AllFieldsSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); @@ -63,7 > +63,7 @@ public class UserStatisticsDaoImpl extends > GenericDaoBase<UserStatisticsVO, Long > > AllFieldsSearch.and("deviceType", > AllFieldsSearch.entity().getDeviceType(), SearchCriteria.Op.EQ); > > AllFieldsSearch.done(); > > } > > - > > + > > @Override > > public UserStatisticsVO findBy(long accountId, long dcId, long > > networkId, > String publicIp, Long deviceId, String deviceType) { > > SearchCriteria<UserStatisticsVO> sc = > > AllFieldsSearch.create(); @@ -133,5 +133,5 @@ public class > UserStatisticsDaoImpl extends GenericDaoBase<UserStatisticsVO, Long > > } > > return userStats; > > } > > - > > + > > } > > > > http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/03fdb > > fb2/usage/src/com/cloud/usage/UsageManagerImpl.java > > ---------------------------------------------------------------------- > > diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java > > b/usage/src/com/cloud/usage/UsageManagerImpl.java > > index bfdca1d..66af7f4 100644 > > --- a/usage/src/com/cloud/usage/UsageManagerImpl.java > > +++ b/usage/src/com/cloud/usage/UsageManagerImpl.java > > @@ -1430,7 +1430,7 @@ public class UsageManagerImpl extends > ManagerBase implements UsageManager, Runna > > timeSinceJob = now - lastSuccess; > > } > > > > - if ((timeSinceJob > 0) && (timeSinceJob > > aggregationDurationMillis)) { > > + if ((timeSinceJob > 0) && (timeSinceJob > > > + (aggregationDurationMillis - 100)) { > > if (timeToJob > (aggregationDurationMillis/2)) > > { > > if (s_logger.isDebugEnabled()) { > > s_logger.debug("it's been " + > > timeSinceJob + " ms since last usage job and " + timeToJob + " ms until next > job, scheduling an immediate job to catch up (aggregation duration is " + > m_aggregationDuration + " minutes)"); > >