mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
improve cluster overcommit value cache
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
1589cde4e4
commit
5f86dad4cb
@ -16,6 +16,8 @@
|
||||
// under the License.
|
||||
package com.cloud.dc;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
@ -29,6 +31,8 @@ public interface ClusterDetailsDao extends GenericDao<ClusterDetailsVO, Long> {
|
||||
|
||||
ClusterDetailsVO findDetail(long clusterId, String name);
|
||||
|
||||
Map<String, String> findDetails(long clusterId, Collection<String> names);
|
||||
|
||||
void deleteDetails(long clusterId);
|
||||
|
||||
String getVmwareDcName(Long clusterId);
|
||||
|
||||
@ -16,13 +16,16 @@
|
||||
// under the License.
|
||||
package com.cloud.dc;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
|
||||
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
||||
import com.cloud.utils.crypt.DBEncryptionUtil;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
@ -82,6 +85,23 @@ public class ClusterDetailsDaoImpl extends GenericDaoBase<ClusterDetailsVO, Long
|
||||
return details;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> findDetails(long clusterId, Collection<String> names) {
|
||||
if (CollectionUtils.isEmpty(names)) {
|
||||
return new HashMap<>();
|
||||
}
|
||||
SearchBuilder<ClusterDetailsVO> sb = createSearchBuilder();
|
||||
sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.IN);
|
||||
sb.done();
|
||||
SearchCriteria<ClusterDetailsVO> sc = sb.create();
|
||||
sc.setParameters("clusterId", clusterId);
|
||||
sc.setParameters("name", names.toArray());
|
||||
List<ClusterDetailsVO> results = search(sc, null);
|
||||
return results.stream()
|
||||
.collect(Collectors.toMap(ClusterDetailsVO::getName, ClusterDetailsVO::getValue));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDetails(long clusterId) {
|
||||
SearchCriteria<ClusterDetailsVO> sc = ClusterSearch.create();
|
||||
|
||||
@ -148,7 +148,7 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager,
|
||||
@Inject
|
||||
MessageBus _messageBus;
|
||||
|
||||
private LazyCache<Long, Pair<ClusterDetailsVO, ClusterDetailsVO>> clusterValuesCache;
|
||||
private LazyCache<Long, Pair<String, String>> clusterValuesCache;
|
||||
private SingleCache<Map<Long, ServiceOfferingVO>> serviceOfferingsCache;
|
||||
private QueuedExecutor<Host> hostCapacityUpdateExecutor;
|
||||
|
||||
@ -170,7 +170,7 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager,
|
||||
public boolean start() {
|
||||
_resourceMgr.registerResourceEvent(ResourceListener.EVENT_PREPARE_MAINTENANCE_AFTER, this);
|
||||
_resourceMgr.registerResourceEvent(ResourceListener.EVENT_CANCEL_MAINTENANCE_AFTER, this);
|
||||
clusterValuesCache = new LazyCache<>(16, 60, this::getClusterValues);
|
||||
clusterValuesCache = new LazyCache<>(128, 60, this::getClusterValues);
|
||||
serviceOfferingsCache = new SingleCache<>(60, this::getServiceOfferingsMap);
|
||||
hostCapacityUpdateExecutor.startProcessing();
|
||||
return true;
|
||||
@ -652,9 +652,11 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager,
|
||||
hostCapacityUpdateExecutor.queueRequest(host);
|
||||
}
|
||||
|
||||
protected Pair<ClusterDetailsVO, ClusterDetailsVO> getClusterValues(long clusterId) {
|
||||
return new Pair<>(_clusterDetailsDao.findDetail(clusterId, VmDetailConstants.CPU_OVER_COMMIT_RATIO),
|
||||
_clusterDetailsDao.findDetail(clusterId, VmDetailConstants.MEMORY_OVER_COMMIT_RATIO));
|
||||
protected Pair<String, String> getClusterValues(long clusterId) {
|
||||
Map<String, String> map = _clusterDetailsDao.findDetails(clusterId,
|
||||
List.of(VmDetailConstants.CPU_OVER_COMMIT_RATIO, VmDetailConstants.CPU_OVER_COMMIT_RATIO));
|
||||
return new Pair<>(map.get(VmDetailConstants.CPU_OVER_COMMIT_RATIO),
|
||||
map.get(VmDetailConstants.CPU_OVER_COMMIT_RATIO));
|
||||
}
|
||||
|
||||
|
||||
@ -712,12 +714,10 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager,
|
||||
}
|
||||
vms.addAll(vosMigrating);
|
||||
|
||||
Pair<ClusterDetailsVO, ClusterDetailsVO> clusterValues =
|
||||
Pair<String, String> clusterValues =
|
||||
clusterValuesCache.get(host.getClusterId());
|
||||
ClusterDetailsVO clusterDetailCpu = clusterValues.first();
|
||||
ClusterDetailsVO clusterDetailRam = clusterValues.second();
|
||||
Float clusterCpuOvercommitRatio = Float.parseFloat(clusterDetailCpu.getValue());
|
||||
Float clusterRamOvercommitRatio = Float.parseFloat(clusterDetailRam.getValue());
|
||||
Float clusterCpuOvercommitRatio = Float.parseFloat(clusterValues.first());
|
||||
Float clusterRamOvercommitRatio = Float.parseFloat(clusterValues.second());
|
||||
for (VMInstanceVO vm : vms) {
|
||||
Float cpuOvercommitRatio = 1.0f;
|
||||
Float ramOvercommitRatio = 1.0f;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user