Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions api/src/main/java/com/cloud/network/as/AutoScaleService.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ public interface AutoScaleService {

Counter createCounter(CreateCounterCmd cmd);

Counter getCounter(long counterId);

boolean deleteCounter(long counterId) throws ResourceInUseException;

List<? extends Counter> listCounters(ListCountersCmd cmd);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package org.apache.cloudstack.api.command.admin.autoscale;

import org.apache.cloudstack.context.CallContext;

import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiCommandResourceType;
Expand Down Expand Up @@ -89,16 +90,18 @@
if (ctr != null) {
this.setEntityId(ctr.getId());
this.setEntityUuid(ctr.getUuid());
CounterResponse response = _responseGenerator.createCounterResponse(ctr);
response.setResponseName(getCommandName());
this.setResponseObject(response);
} else {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Counter with name " + getName());
}
}

@Override
public void execute() {
CallContext.current().setEventDetails("Guest OS Id: " + getEntityId());
Counter ctr = _autoScaleService.getCounter(getEntityId());
CounterResponse response = _responseGenerator.createCounterResponse(ctr);
response.setResponseName(getCommandName());
this.setResponseObject(response);

Check warning on line 104 in api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java

View check run for this annotation

Codecov / codecov/patch

api/src/main/java/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java#L100-L104

Added lines #L100 - L104 were not covered by tests
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.cloud.utils.db.GenericDao;

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

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
@Component
public class CounterDaoImpl extends GenericDaoBase<CounterVO, Long> implements CounterDao {
final SearchBuilder<CounterVO> AllFieldsSearch;
final SearchBuilder<CounterVO> CounterNameSearch;

protected CounterDaoImpl() {
AllFieldsSearch = createSearchBuilder();
Expand All @@ -40,6 +41,21 @@
AllFieldsSearch.and("source", AllFieldsSearch.entity().getSource(), Op.EQ);
AllFieldsSearch.and("provider", AllFieldsSearch.entity().getProvider(), Op.EQ);
AllFieldsSearch.done();

CounterNameSearch = createSearchBuilder();
CounterNameSearch.and("name", CounterNameSearch.entity().getName(), Op.EQ);
CounterNameSearch.and("source", CounterNameSearch.entity().getSource(), Op.EQ);
CounterNameSearch.and("provider", CounterNameSearch.entity().getProvider(), Op.EQ);
CounterNameSearch.done();
}

Check warning on line 50 in engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java

View check run for this annotation

Codecov / codecov/patch

engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java#L45-L50

Added lines #L45 - L50 were not covered by tests

@Override
public CounterVO findByNameProviderSource(String name, String source, String provider) {
SearchCriteria<CounterVO> sc = CounterNameSearch.create();
sc.setParameters("name", name);
sc.setParameters("source", source);
sc.setParameters("provider", provider);
return findOneBy(sc);

Check warning on line 58 in engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java

View check run for this annotation

Codecov / codecov/patch

engine/schema/src/main/java/com/cloud/network/as/dao/CounterDaoImpl.java#L53-L58

Added lines #L53 - L58 were not covered by tests
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.

-- in cloud
DROP PROCEDURE IF EXISTS `cloud`.`IDEMPOTENT_DROP_UNIQUE_KEY`;

CREATE PROCEDURE `cloud`.`IDEMPOTENT_DROP_UNIQUE_KEY` (
IN in_table_name VARCHAR(200),
IN in_index_name VARCHAR(200)
)
BEGIN
DECLARE CONTINUE HANDLER FOR 1091, 1025 BEGIN END; SET @ddl = CONCAT('ALTER TABLE ', in_table_name, ' DROP KEY ', in_index_name); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END;
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@ CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.storage_pool', 'used_iops', 'bigint

-- Add reason column for op_ha_work
CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.op_ha_work', 'reason', 'varchar(32) DEFAULT NULL COMMENT "Reason for the HA work"');

CALL `cloud`.`IDEMPOTENT_DROP_UNIQUE_KEY`('counter', 'uc_counter__provider__source__value');
CALL `cloud`.`IDEMPOTENT_ADD_UNIQUE_KEY`('cloud.counter', 'uc_counter__provider__source__value__removed', '(provider, source, value, removed)');
Original file line number Diff line number Diff line change
Expand Up @@ -1452,7 +1452,7 @@
@DB
public Counter createCounter(CreateCounterCmd cmd) {
String source = cmd.getSource().toUpperCase();
String name = cmd.getName();
String name = cmd.getName();
Counter.Source src;
// Validate Source
try {
Expand All @@ -1469,13 +1469,23 @@

CounterVO counter = null;

CounterVO existingCounter = counterDao.findByNameProviderSource(name, source, provider.getName());
if (existingCounter != null) {
throw new InvalidParameterValueException("Counter with name " + name + " already exists");

Check warning on line 1474 in server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

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

Added line #L1474 was not covered by tests
}
logger.debug("Adding Counter " + name);
counter = counterDao.persist(new CounterVO(src, name, cmd.getValue(), provider));

CallContext.current().setEventDetails(" Id: " + counter.getId() + " Name: " + name);
return counter;
}

@Override
@ActionEvent(eventType = EventTypes.EVENT_COUNTER_CREATE, eventDescription = "Creating a counter", async = true)
public Counter getCounter(long counterId) {
return counterDao.findById(counterId);
}

Check warning on line 1487 in server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java#L1485-L1487

Added lines #L1485 - L1487 were not covered by tests
Comment on lines +1488 to +1492
Copy link

Copilot AI Oct 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The getCounter method has incorrect event annotation. It should use EVENT_COUNTER_GET or similar since this is a read operation, not a create operation.

Copilot uses AI. Check for mistakes.

@Override
@ActionEvent(eventType = EventTypes.EVENT_CONDITION_CREATE, eventDescription = "Condition", create = true)
public Condition createCondition(CreateConditionCmd cmd) {
Expand Down
Loading