Skip to content

Commit 11f1217

Browse files
committed
prevent addition of counters with same name, provider and source as a non-deleted counter
1 parent 1ee387d commit 11f1217

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

engine/schema/src/main/java/com/cloud/network/as/dao/CounterDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.cloud.utils.db.GenericDao;
2525

2626
public interface CounterDao extends GenericDao<CounterVO, Long> {
27+
CounterVO findByNameProviderSource(String name, String source, String provider);
2728
public List<CounterVO> listCounters(Long id, String name, String source, String provider, String keyword, Filter filter);
2829

2930
}

engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
@Component
3333
public class CounterDaoImpl extends GenericDaoBase<CounterVO, Long> implements CounterDao {
3434
final SearchBuilder<CounterVO> AllFieldsSearch;
35+
final SearchBuilder<CounterVO> CounterNameSearch;
3536

3637
protected CounterDaoImpl() {
3738
AllFieldsSearch = createSearchBuilder();
@@ -40,6 +41,21 @@ protected CounterDaoImpl() {
4041
AllFieldsSearch.and("source", AllFieldsSearch.entity().getSource(), Op.EQ);
4142
AllFieldsSearch.and("provider", AllFieldsSearch.entity().getProvider(), Op.EQ);
4243
AllFieldsSearch.done();
44+
45+
CounterNameSearch = createSearchBuilder();
46+
CounterNameSearch.and("name", CounterNameSearch.entity().getName(), Op.EQ);
47+
CounterNameSearch.and("source", CounterNameSearch.entity().getSource(), Op.EQ);
48+
CounterNameSearch.and("provider", CounterNameSearch.entity().getProvider(), Op.EQ);
49+
CounterNameSearch.done();
50+
}
51+
52+
@Override
53+
public CounterVO findByNameProviderSource(String name, String source, String provider) {
54+
SearchCriteria<CounterVO> sc = CounterNameSearch.create();
55+
sc.setParameters("name", name);
56+
sc.setParameters("source", source);
57+
sc.setParameters("provider", provider);
58+
return findOneBy(sc);
4359
}
4460

4561
@Override

server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1452,7 +1452,7 @@ public AutoScaleVmGroup disableAutoScaleVmGroup(Long id) {
14521452
@DB
14531453
public Counter createCounter(CreateCounterCmd cmd) {
14541454
String source = cmd.getSource().toUpperCase();
1455-
String name = cmd.getName();
1455+
String name = cmd.getName();
14561456
Counter.Source src;
14571457
// Validate Source
14581458
try {
@@ -1469,6 +1469,10 @@ public Counter createCounter(CreateCounterCmd cmd) {
14691469

14701470
CounterVO counter = null;
14711471

1472+
CounterVO existingCounter = counterDao.findByNameProviderSource(name, source, provider.getName());
1473+
if (existingCounter != null) {
1474+
throw new InvalidParameterValueException("Counter with name " + name + " already exists");
1475+
}
14721476
logger.debug("Adding Counter " + name);
14731477
counter = counterDao.persist(new CounterVO(src, name, cmd.getValue(), provider));
14741478

0 commit comments

Comments
 (0)