Skip to content

Commit dd2ac31

Browse files
committed
apache#9888 backport to 4.19: Fix Usage inconsistencies
1 parent f13cf59 commit dd2ac31

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

engine/schema/src/main/java/com/cloud/usage/dao/UsageNetworksDaoImpl.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
// under the License.
1717
package com.cloud.usage.dao;
1818

19-
import com.cloud.network.Network;
2019
import com.cloud.usage.UsageNetworksVO;
2120
import com.cloud.utils.DateUtil;
2221
import com.cloud.utils.db.GenericDaoBase;
@@ -68,11 +67,10 @@ public void remove(long networkId, Date removed) {
6867
SearchCriteria<UsageNetworksVO> sc = this.createSearchCriteria();
6968
sc.addAnd("networkId", SearchCriteria.Op.EQ, networkId);
7069
sc.addAnd("removed", SearchCriteria.Op.NULL);
71-
UsageNetworksVO vo = findOneBy(sc);
72-
if (vo != null) {
73-
vo.setRemoved(removed);
74-
vo.setState(Network.State.Destroy.name());
75-
update(vo.getId(), vo);
70+
List<UsageNetworksVO> usageNetworksVOs = listBy(sc);
71+
for (UsageNetworksVO entry : usageNetworksVOs) {
72+
entry.setRemoved(removed);
73+
update(entry.getId(), entry);
7674
}
7775
} catch (final Exception e) {
7876
txn.rollback();

engine/schema/src/main/java/com/cloud/usage/dao/UsageVpcDaoImpl.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
// under the License.
1717
package com.cloud.usage.dao;
1818

19-
import com.cloud.network.vpc.Vpc;
2019
import com.cloud.usage.UsageVpcVO;
2120
import com.cloud.utils.DateUtil;
2221
import com.cloud.utils.db.GenericDaoBase;
@@ -66,11 +65,10 @@ public void remove(long vpcId, Date removed) {
6665
SearchCriteria<UsageVpcVO> sc = this.createSearchCriteria();
6766
sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId);
6867
sc.addAnd("removed", SearchCriteria.Op.NULL);
69-
UsageVpcVO vo = findOneBy(sc);
70-
if (vo != null) {
71-
vo.setRemoved(removed);
72-
vo.setState(Vpc.State.Inactive.name());
73-
update(vo.getId(), vo);
68+
List<UsageVpcVO> usageVpcVOs = listBy(sc);
69+
for (UsageVpcVO entry : usageVpcVOs) {
70+
entry.setRemoved(removed);
71+
update(entry.getId(), entry);
7472
}
7573
} catch (final Exception e) {
7674
txn.rollback();

usage/src/main/java/com/cloud/usage/UsageManagerImpl.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,7 +1540,7 @@ private void createVolumeHelperEvent(UsageEventVO event) {
15401540
//For volumes which are 'attached' successfully, set the 'deleted' column in the usage_storage table,
15411541
//so that the secondary storage should stop accounting and only primary will be accounted.
15421542
SearchCriteria<UsageStorageVO> sc = _usageStorageDao.createSearchCriteria();
1543-
sc.addAnd("id", SearchCriteria.Op.EQ, volId);
1543+
sc.addAnd("entityId", SearchCriteria.Op.EQ, volId);
15441544
sc.addAnd("storageType", SearchCriteria.Op.EQ, StorageTypes.VOLUME);
15451545
List<UsageStorageVO> volumesVOs = _usageStorageDao.search(sc, null);
15461546
if (volumesVOs != null) {
@@ -1595,7 +1595,8 @@ private void createVolumeHelperEvent(UsageEventVO event) {
15951595
//For Upload event add an entry to the usage_storage table.
15961596
SearchCriteria<UsageStorageVO> sc = _usageStorageDao.createSearchCriteria();
15971597
sc.addAnd("accountId", SearchCriteria.Op.EQ, event.getAccountId());
1598-
sc.addAnd("id", SearchCriteria.Op.EQ, volId);
1598+
sc.addAnd("entityId", SearchCriteria.Op.EQ, volId);
1599+
sc.addAnd("storageType", SearchCriteria.Op.EQ, StorageTypes.VOLUME);
15991600
sc.addAnd("deleted", SearchCriteria.Op.NULL);
16001601
List<UsageStorageVO> volumesVOs = _usageStorageDao.search(sc, null);
16011602

@@ -1772,7 +1773,7 @@ private void createLoadBalancerHelperEvent(UsageEventVO event) {
17721773
} else if (EventTypes.EVENT_LOAD_BALANCER_DELETE.equals(event.getType())) {
17731774
SearchCriteria<UsageLoadBalancerPolicyVO> sc = _usageLoadBalancerPolicyDao.createSearchCriteria();
17741775
sc.addAnd("accountId", SearchCriteria.Op.EQ, event.getAccountId());
1775-
sc.addAnd("id", SearchCriteria.Op.EQ, id);
1776+
sc.addAnd("lbId", SearchCriteria.Op.EQ, id);
17761777
sc.addAnd("deleted", SearchCriteria.Op.NULL);
17771778
List<UsageLoadBalancerPolicyVO> lbVOs = _usageLoadBalancerPolicyDao.search(sc, null);
17781779
if (lbVOs.size() > 1) {
@@ -1806,7 +1807,7 @@ private void createPortForwardingHelperEvent(UsageEventVO event) {
18061807
} else if (EventTypes.EVENT_NET_RULE_DELETE.equals(event.getType())) {
18071808
SearchCriteria<UsagePortForwardingRuleVO> sc = _usagePortForwardingRuleDao.createSearchCriteria();
18081809
sc.addAnd("accountId", SearchCriteria.Op.EQ, event.getAccountId());
1809-
sc.addAnd("id", SearchCriteria.Op.EQ, id);
1810+
sc.addAnd("pfId", SearchCriteria.Op.EQ, id);
18101811
sc.addAnd("deleted", SearchCriteria.Op.NULL);
18111812
List<UsagePortForwardingRuleVO> pfVOs = _usagePortForwardingRuleDao.search(sc, null);
18121813
if (pfVOs.size() > 1) {
@@ -2104,7 +2105,7 @@ private void createVmSnapshotOnPrimaryEvent(UsageEventVO event) {
21042105
} else if (EventTypes.EVENT_VM_SNAPSHOT_OFF_PRIMARY.equals(event.getType())) {
21052106
QueryBuilder<UsageSnapshotOnPrimaryVO> sc = QueryBuilder.create(UsageSnapshotOnPrimaryVO.class);
21062107
sc.and(sc.entity().getAccountId(), SearchCriteria.Op.EQ, event.getAccountId());
2107-
sc.and(sc.entity().getId(), SearchCriteria.Op.EQ, vmId);
2108+
sc.and(sc.entity().getVmId(), SearchCriteria.Op.EQ, vmId);
21082109
sc.and(sc.entity().getName(), SearchCriteria.Op.EQ, name);
21092110
sc.and(sc.entity().getDeleted(), SearchCriteria.Op.NULL);
21102111
List<UsageSnapshotOnPrimaryVO> vmsnaps = sc.list();
@@ -2147,6 +2148,9 @@ private void handleNetworkEvent(UsageEventVO event) {
21472148
if (EventTypes.EVENT_NETWORK_DELETE.equals(event.getType())) {
21482149
usageNetworksDao.remove(event.getResourceId(), event.getCreateDate());
21492150
} else if (EventTypes.EVENT_NETWORK_CREATE.equals(event.getType())) {
2151+
s_logger.debug(String.format("Marking existing helper entries for network [%s] as removed.", event.getResourceId()));
2152+
usageNetworksDao.remove(event.getResourceId(), event.getCreateDate());
2153+
s_logger.debug(String.format("Creating a helper entry for network [%s].", event.getResourceId()));
21502154
UsageNetworksVO usageNetworksVO = new UsageNetworksVO(event.getResourceId(), event.getOfferingId(), event.getZoneId(), event.getAccountId(), domainId, Network.State.Allocated.name(), event.getCreateDate(), null);
21512155
usageNetworksDao.persist(usageNetworksVO);
21522156
} else if (EventTypes.EVENT_NETWORK_UPDATE.equals(event.getType())) {
@@ -2162,6 +2166,9 @@ private void handleVpcEvent(UsageEventVO event) {
21622166
if (EventTypes.EVENT_VPC_DELETE.equals(event.getType())) {
21632167
usageVpcDao.remove(event.getResourceId(), event.getCreateDate());
21642168
} else if (EventTypes.EVENT_VPC_CREATE.equals(event.getType())) {
2169+
s_logger.debug(String.format("Marking existing helper entries for VPC [%s] as removed.", event.getResourceId()));
2170+
usageVpcDao.remove(event.getResourceId(), event.getCreateDate());
2171+
s_logger.debug(String.format("Creating a helper entry for VPC [%s].", event.getResourceId()));
21652172
UsageVpcVO usageVPCVO = new UsageVpcVO(event.getResourceId(), event.getZoneId(), event.getAccountId(), domainId, Vpc.State.Enabled.name(), event.getCreateDate(), null);
21662173
usageVpcDao.persist(usageVPCVO);
21672174
} else {

0 commit comments

Comments
 (0)