Skip to content

Commit 29e8819

Browse files
committed
Do not create new helper entries on duplicated CREATE events of networks and VPCs
1 parent dd2ac31 commit 29e8819

File tree

5 files changed

+56
-5
lines changed

5 files changed

+56
-5
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ public interface UsageNetworksDao extends GenericDao<UsageNetworksVO, Long> {
2828
void remove(long networkId, Date removed);
2929

3030
List<UsageNetworksVO> getUsageRecords(Long accountId, Date startDate, Date endDate);
31+
32+
List<UsageNetworksVO> listAll(long networkId);
3133
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import com.cloud.usage.UsageNetworksVO;
2020
import com.cloud.utils.DateUtil;
2121
import com.cloud.utils.db.GenericDaoBase;
22+
import com.cloud.utils.db.SearchBuilder;
2223
import com.cloud.utils.db.SearchCriteria;
2324
import com.cloud.utils.db.TransactionLegacy;
2425
import org.apache.log4j.Logger;
2526
import org.springframework.stereotype.Component;
2627

28+
import javax.annotation.PostConstruct;
2729
import java.sql.PreparedStatement;
2830
import java.sql.ResultSet;
2931
import java.util.ArrayList;
@@ -38,6 +40,14 @@ public class UsageNetworksDaoImpl extends GenericDaoBase<UsageNetworksVO, Long>
3840
" account_id = ? AND ((removed IS NULL AND created <= ?) OR (created BETWEEN ? AND ?) OR (removed BETWEEN ? AND ?) " +
3941
" OR ((created <= ?) AND (removed >= ?)))";
4042

43+
private SearchBuilder<UsageNetworksVO> usageNetworksSearch;
44+
45+
@PostConstruct
46+
public void init() {
47+
usageNetworksSearch = createSearchBuilder();
48+
usageNetworksSearch.and("networkId", usageNetworksSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
49+
usageNetworksSearch.done();
50+
}
4151

4252
@Override
4353
public void update(long networkId, long newNetworkOffering, String state) {
@@ -129,4 +139,11 @@ public List<UsageNetworksVO> getUsageRecords(Long accountId, Date startDate, Dat
129139

130140
return usageRecords;
131141
}
142+
143+
@Override
144+
public List<UsageNetworksVO> listAll(long networkId) {
145+
SearchCriteria<UsageNetworksVO> sc = usageNetworksSearch.create();
146+
sc.setParameters("networkId", networkId);
147+
return listBy(sc);
148+
}
132149
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424

2525
public interface UsageVpcDao extends GenericDao<UsageVpcVO, Long> {
2626
void update(UsageVpcVO usage);
27+
2728
void remove(long vpcId, Date removed);
29+
2830
List<UsageVpcVO> getUsageRecords(Long accountId, Date startDate, Date endDate);
31+
32+
List<UsageVpcVO> listAll(long vpcId);
2933
}

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

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

19+
import com.cloud.usage.UsageNetworksVO;
1920
import com.cloud.usage.UsageVpcVO;
2021
import com.cloud.utils.DateUtil;
2122
import com.cloud.utils.db.GenericDaoBase;
23+
import com.cloud.utils.db.SearchBuilder;
2224
import com.cloud.utils.db.SearchCriteria;
2325
import com.cloud.utils.db.TransactionLegacy;
2426
import org.apache.log4j.Logger;
2527
import org.springframework.stereotype.Component;
2628

29+
import javax.annotation.PostConstruct;
2730
import java.sql.PreparedStatement;
2831
import java.sql.ResultSet;
2932
import java.util.ArrayList;
@@ -38,6 +41,15 @@ public class UsageVpcDaoImpl extends GenericDaoBase<UsageVpcVO, Long> implements
3841
" account_id = ? AND ((removed IS NULL AND created <= ?) OR (created BETWEEN ? AND ?) OR (removed BETWEEN ? AND ?) " +
3942
" OR ((created <= ?) AND (removed >= ?)))";
4043

44+
private SearchBuilder<UsageVpcVO> usageVpcSearch;
45+
46+
@PostConstruct
47+
public void init() {
48+
usageVpcSearch = createSearchBuilder();
49+
usageVpcSearch.and("vpcId", usageVpcSearch.entity().getVpcId(), SearchCriteria.Op.EQ);
50+
usageVpcSearch.done();
51+
}
52+
4153
@Override
4254
public void update(UsageVpcVO usage) {
4355
TransactionLegacy txn = TransactionLegacy.open(TransactionLegacy.USAGE_DB);
@@ -126,4 +138,11 @@ public List<UsageVpcVO> getUsageRecords(Long accountId, Date startDate, Date end
126138

127139
return usageRecords;
128140
}
141+
142+
@Override
143+
public List<UsageVpcVO> listAll(long vpcId) {
144+
SearchCriteria<UsageVpcVO> sc = usageVpcSearch.create();
145+
sc.setParameters("vpcId", vpcId);
146+
return listBy(sc);
147+
}
129148
}

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2148,10 +2148,15 @@ private void handleNetworkEvent(UsageEventVO event) {
21482148
if (EventTypes.EVENT_NETWORK_DELETE.equals(event.getType())) {
21492149
usageNetworksDao.remove(event.getResourceId(), event.getCreateDate());
21502150
} 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());
2151+
List<UsageNetworksVO> entries = usageNetworksDao.listAll(event.getResourceId());
2152+
if (!entries.isEmpty()) {
2153+
s_logger.warn(String.format("Active helper entries already exist for network [%s]; we will not create a new one.",
2154+
event.getResourceId()));
2155+
return;
2156+
}
21532157
s_logger.debug(String.format("Creating a helper entry for network [%s].", event.getResourceId()));
2154-
UsageNetworksVO usageNetworksVO = new UsageNetworksVO(event.getResourceId(), event.getOfferingId(), event.getZoneId(), event.getAccountId(), domainId, Network.State.Allocated.name(), event.getCreateDate(), null);
2158+
UsageNetworksVO usageNetworksVO = new UsageNetworksVO(event.getResourceId(), event.getOfferingId(), event.getZoneId(),
2159+
event.getAccountId(), domainId, Network.State.Allocated.name(), event.getCreateDate(), null);
21552160
usageNetworksDao.persist(usageNetworksVO);
21562161
} else if (EventTypes.EVENT_NETWORK_UPDATE.equals(event.getType())) {
21572162
usageNetworksDao.update(event.getResourceId(), event.getOfferingId(), event.getResourceType());
@@ -2166,8 +2171,12 @@ private void handleVpcEvent(UsageEventVO event) {
21662171
if (EventTypes.EVENT_VPC_DELETE.equals(event.getType())) {
21672172
usageVpcDao.remove(event.getResourceId(), event.getCreateDate());
21682173
} 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());
2174+
List<UsageVpcVO> entries = usageVpcDao.listAll(event.getResourceId());
2175+
if (!entries.isEmpty()) {
2176+
s_logger.warn(String.format("Active helper entries already exist for VPC [%s]; we will not create a new one.",
2177+
event.getResourceId()));
2178+
return;
2179+
}
21712180
s_logger.debug(String.format("Creating a helper entry for VPC [%s].", event.getResourceId()));
21722181
UsageVpcVO usageVPCVO = new UsageVpcVO(event.getResourceId(), event.getZoneId(), event.getAccountId(), domainId, Vpc.State.Enabled.name(), event.getCreateDate(), null);
21732182
usageVpcDao.persist(usageVPCVO);

0 commit comments

Comments
 (0)