This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.22
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.22 by this push:
     new 161b4177c2d Add logs for storage pools reordering (#10419)
161b4177c2d is described below

commit 161b4177c2d12bf3cf3bc9e70e2bf70a961e6389
Author: julien-vaz <[email protected]>
AuthorDate: Tue Apr 14 04:51:05 2026 -0300

    Add logs for storage pools reordering (#10419)
    
    Co-authored-by: Julien Hervot de Mattos Vaz <[email protected]>
---
 .../allocator/AbstractStoragePoolAllocator.java    | 76 ++++++++++------------
 1 file changed, 35 insertions(+), 41 deletions(-)

diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
index e0e244d53d3..4df54398f28 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
@@ -145,10 +145,10 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
             storageType = "shared";
         }
 
-        logger.debug(String.format(
-                "Filtering storage pools by capacity type [%s] as the first 
storage pool of the list, with name [%s] and ID [%s], is a [%s] storage.",
+        logger.info(
+                "Filtering storage pools by capacity type [{}] as the first 
storage pool of the list, with name [{}] and ID [{}], is a [{}] storage.",
                 capacityType, storagePool.getName(), storagePool.getUuid(), 
storageType
-        ));
+        );
 
         Pair<List<Long>, Map<Long, Double>> result = 
capacityDao.orderHostsByFreeCapacity(zoneId, clusterId, capacityType);
         List<Long> poolIdsByCapacity = result.first();
@@ -185,7 +185,7 @@ public abstract class AbstractStoragePoolAllocator extends 
AdapterBase implement
         Long clusterId = plan.getClusterId();
 
         List<Long> poolIdsByVolCount = 
volumeDao.listPoolIdsByVolumeCount(dcId, podId, clusterId, 
account.getAccountId());
-        logger.debug(String.format("List of pools in ascending order of number 
of volumes for account [%s] is [%s].", account, poolIdsByVolCount));
+        logger.debug("List of pools in ascending order of number of volumes 
for account [{}] is [{}].", account, poolIdsByVolCount);
 
         // now filter the given list of Pools by this ordered list
         Map<Long, StoragePool> poolMap = new HashMap<>();
@@ -206,16 +206,11 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
 
     @Override
     public List<StoragePool> reorderPools(List<StoragePool> pools, 
VirtualMachineProfile vmProfile, DeploymentPlan plan, DiskProfile dskCh) {
-        if (logger.isTraceEnabled()) {
-            logger.trace("reordering pools");
-        }
         if (pools == null) {
-            logger.trace("There are no pools to reorder; returning null.");
+            logger.info("There are no pools to reorder.");
             return null;
         }
-        if (logger.isTraceEnabled()) {
-            logger.trace(String.format("reordering %d pools", pools.size()));
-        }
+        logger.info("Reordering [{}] pools", pools.size());
         Account account = null;
         if (vmProfile.getVirtualMachine() != null) {
             account = vmProfile.getOwner();
@@ -224,9 +219,7 @@ public abstract class AbstractStoragePoolAllocator extends 
AdapterBase implement
         pools = reorderStoragePoolsBasedOnAlgorithm(pools, plan, account);
 
         if (vmProfile.getVirtualMachine() == null) {
-            if (logger.isTraceEnabled()) {
-                logger.trace("The VM is null, skipping pools reordering by 
disk provisioning type.");
-            }
+            logger.info("The VM is null, skipping pool reordering by disk 
provisioning type.");
             return pools;
         }
 
@@ -240,14 +233,10 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
 
     List<StoragePool> reorderStoragePoolsBasedOnAlgorithm(List<StoragePool> 
pools, DeploymentPlan plan, Account account) {
         String volumeAllocationAlgorithm = 
VolumeOrchestrationService.VolumeAllocationAlgorithm.value();
-        logger.debug("Using volume allocation algorithm {} to reorder pools.", 
volumeAllocationAlgorithm);
+        logger.info("Using volume allocation algorithm {} to reorder pools.", 
volumeAllocationAlgorithm);
         if (volumeAllocationAlgorithm.equals("random") || 
volumeAllocationAlgorithm.equals("userconcentratedpod_random") || (account == 
null)) {
             reorderRandomPools(pools);
         } else if (StringUtils.equalsAny(volumeAllocationAlgorithm, 
"userdispersing", "firstfitleastconsumed")) {
-            if (logger.isTraceEnabled()) {
-                logger.trace("Using reordering algorithm {}", 
volumeAllocationAlgorithm);
-            }
-
             if (volumeAllocationAlgorithm.equals("userdispersing")) {
                 pools = reorderPoolsByNumberOfVolumes(plan, pools, account);
             } else {
@@ -259,16 +248,15 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
 
     void reorderRandomPools(List<StoragePool> pools) {
         StorageUtil.traceLogStoragePools(pools, logger, "pools to choose from: 
");
-        if (logger.isTraceEnabled()) {
-            logger.trace("Shuffle this so that we don't check the pools in the 
same order. Algorithm == 'random' (or no account?)");
-        }
-        StorageUtil.traceLogStoragePools(pools, logger, "pools to shuffle: ");
+        logger.trace("Shuffle this so that we don't check the pools in the 
same order. Algorithm == 'random' (or no account?)");
+        logger.debug("Pools to shuffle: [{}]", pools);
         Collections.shuffle(pools, secureRandom);
-        StorageUtil.traceLogStoragePools(pools, logger, "shuffled list of 
pools to choose from: ");
+        logger.debug("Shuffled list of pools to choose from: [{}]", pools);
     }
 
     private List<StoragePool> 
reorderPoolsByDiskProvisioningType(List<StoragePool> pools, DiskProfile 
diskProfile) {
         if (diskProfile != null && diskProfile.getProvisioningType() != null 
&& !diskProfile.getProvisioningType().equals(Storage.ProvisioningType.THIN)) {
+            logger.info("Reordering [{}] pools by disk provisioning type 
[{}].", pools.size(), diskProfile.getProvisioningType());
             List<StoragePool> reorderedPools = new ArrayList<>();
             int preferredIndex = 0;
             for (StoragePool pool : pools) {
@@ -282,22 +270,28 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
                     reorderedPools.add(preferredIndex++, pool);
                 }
             }
+            logger.debug("Reordered list of pools by disk provisioning type 
[{}]: [{}]", diskProfile.getProvisioningType(), reorderedPools);
             return reorderedPools;
         } else {
+            if (diskProfile == null) {
+                logger.info("Reordering pools by disk provisioning type wasn't 
necessary, since no disk profile was found.");
+            } else {
+                logger.debug("Reordering pools by disk provisioning type 
wasn't necessary, since the provisioning type is [{}].", 
diskProfile.getProvisioningType());
+            }
             return pools;
         }
     }
 
     protected boolean filter(ExcludeList avoid, StoragePool pool, DiskProfile 
dskCh, DeploymentPlan plan) {
-        logger.debug(String.format("Checking if storage pool [%s] is suitable 
to disk [%s].", pool, dskCh));
+        logger.debug("Checking if storage pool [{}] is suitable to disk 
[{}].", pool, dskCh);
         if (avoid.shouldAvoid(pool)) {
-            logger.debug(String.format("StoragePool [%s] is in avoid set, 
skipping this pool to allocation of disk [%s].", pool, dskCh));
+            logger.debug("StoragePool [{}] is in avoid set, skipping this pool 
to allocation of disk [{}].", pool, dskCh);
             return false;
         }
 
         if (dskCh.requiresEncryption() && 
!pool.getPoolType().supportsEncryption()) {
             if (logger.isDebugEnabled()) {
-                logger.debug(String.format("Storage pool type '%s' doesn't 
support encryption required for volume, skipping this pool", 
pool.getPoolType()));
+                logger.debug("Storage pool type '[{}]' doesn't support 
encryption required for volume, skipping this pool", pool.getPoolType());
             }
             return false;
         }
@@ -319,8 +313,8 @@ public abstract class AbstractStoragePoolAllocator extends 
AdapterBase implement
         }
 
         if (!checkDiskProvisioningSupport(dskCh, pool)) {
-            logger.debug(String.format("Storage pool [%s] does not have 
support to disk provisioning of disk [%s].", pool, 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(dskCh,
-                    "type", "name", "diskOfferingId", "templateId", 
"volumeId", "provisioningType", "hyperType")));
+            logger.debug("Storage pool [{}] does not have support to disk 
provisioning of disk [{}].", pool, 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(dskCh,
+                    "type", "name", "diskOfferingId", "templateId", 
"volumeId", "provisioningType", "hyperType"));
             return false;
         }
 
@@ -332,7 +326,7 @@ public abstract class AbstractStoragePoolAllocator extends 
AdapterBase implement
             HostVO plannedHost = hostDao.findById(plan.getHostId());
             if 
(!storageMgr.checkIfHostAndStoragePoolHasCommonStorageAccessGroups(plannedHost, 
pool)) {
                 if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("StoragePool %s and host %s 
does not have matching storage access groups", pool, plannedHost));
+                    logger.debug("StoragePool [{}] and host [{}] does not have 
matching storage access groups", pool, plannedHost);
                 }
                 return false;
             }
@@ -343,13 +337,13 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
         if (!isTempVolume) {
             volume = volumeDao.findById(dskCh.getVolumeId());
             if (!storageMgr.storagePoolCompatibleWithVolumePool(pool, volume)) 
{
-                logger.debug(String.format("Pool [%s] is not compatible with 
volume [%s], skipping it.", pool, volume));
+                logger.debug("Pool [{}] is not compatible with volume [{}], 
skipping it.", pool, volume);
                 return false;
             }
         }
 
         if (pool.isManaged() && !storageUtil.managedStoragePoolCanScale(pool, 
plan.getClusterId(), plan.getHostId())) {
-            logger.debug(String.format("Cannot allocate pool [%s] to volume 
[%s] because the max number of managed clustered filesystems has been 
exceeded.", pool, volume));
+            logger.debug("Cannot allocate pool [{}] to volume [{}] because the 
max number of managed clustered filesystems has been exceeded.", pool, volume);
             return false;
         }
 
@@ -358,13 +352,13 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
         requestVolumeDiskProfilePairs.add(new Pair<>(volume, dskCh));
         if (dskCh.getHypervisorType() == HypervisorType.VMware) {
             if (pool.getPoolType() == Storage.StoragePoolType.DatastoreCluster 
&& storageMgr.isStoragePoolDatastoreClusterParent(pool)) {
-                logger.debug(String.format("Skipping allocation of pool [%s] 
to volume [%s] because this pool is a parent datastore cluster.", pool, 
volume));
+                logger.debug("Skipping allocation of pool [{}] to volume [{}] 
because this pool is a parent datastore cluster.", pool, volume);
                 return false;
             }
             if (pool.getParent() != 0L) {
                 StoragePoolVO datastoreCluster = 
storagePoolDao.findById(pool.getParent());
                 if (datastoreCluster == null || (datastoreCluster != null && 
datastoreCluster.getStatus() != StoragePoolStatus.Up)) {
-                    logger.debug(String.format("Skipping allocation of pool 
[%s] to volume [%s] because this pool is not in [%s] state.", datastoreCluster, 
volume, StoragePoolStatus.Up));
+                    logger.debug("Skipping allocation of pool [{}] to volume 
[{}] because this pool is not in [{}] state.", datastoreCluster, volume, 
StoragePoolStatus.Up);
                     return false;
                 }
             }
@@ -374,11 +368,11 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
                         
storageMgr.isStoragePoolCompliantWithStoragePolicy(dskCh.getDiskOfferingId(), 
pool) :
                         
storageMgr.isStoragePoolCompliantWithStoragePolicy(requestVolumeDiskProfilePairs,
 pool);
                 if (!isStoragePoolStoragePolicyCompliance) {
-                    logger.debug(String.format("Skipping allocation of pool 
[%s] to volume [%s] because this pool is not compliant with the storage policy 
required by the volume.", pool, volume));
+                    logger.debug("Skipping allocation of pool [{}] to volume 
[{}] because this pool is not compliant with the storage policy required by the 
volume.", pool, volume);
                     return false;
                 }
             } catch (StorageUnavailableException e) {
-                logger.warn(String.format("Could not verify storage policy 
compliance against storage pool %s due to exception %s", pool.getUuid(), 
e.getMessage()));
+                logger.warn("Could not verify storage policy compliance 
against storage pool [{}] due to exception [{}]", pool.getUuid(), 
e.getMessage());
                 return false;
             }
         }
@@ -427,19 +421,19 @@ public abstract class AbstractStoragePoolAllocator 
extends AdapterBase implement
     protected void logDisabledStoragePools(long dcId, Long podId, Long 
clusterId, ScopeType scope) {
         List<StoragePoolVO> disabledPools = 
storagePoolDao.findDisabledPoolsByScope(dcId, podId, clusterId, scope);
         if (disabledPools != null && !disabledPools.isEmpty()) {
-            logger.trace(String.format("Ignoring pools [%s] as they are in 
disabled state.", 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(disabledPools)));
+            logger.trace("Ignoring pools [{}] as they are in disabled state.", 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(disabledPools));
         }
     }
 
     protected void logStartOfSearch(DiskProfile dskCh, VirtualMachineProfile 
vmProfile, DeploymentPlan plan, int returnUpTo,
             boolean bypassStorageTypeCheck){
-        logger.trace(String.format("%s is looking for storage pools that match 
the VM's disk profile [%s], virtual machine profile [%s] and "
-                + "deployment plan [%s]. Returning up to [%d] and 
bypassStorageTypeCheck [%s].", this.getClass().getSimpleName(), dskCh, 
vmProfile, plan, returnUpTo, bypassStorageTypeCheck));
+        logger.trace("[{}] is looking for storage pools that match the VM's 
disk profile [{}], virtual machine profile [{}] and "
+                + "deployment plan [{}]. Returning up to [{}] and 
bypassStorageTypeCheck [{}].", this.getClass().getSimpleName(), dskCh, 
vmProfile, plan, returnUpTo, bypassStorageTypeCheck);
     }
 
     protected void logEndOfSearch(List<StoragePool> storagePoolList) {
-        logger.debug(String.format("%s is returning [%s] suitable storage 
pools [%s].", this.getClass().getSimpleName(), storagePoolList.size(),
-                Arrays.toString(storagePoolList.toArray())));
+        logger.debug("[{}] is returning [{}] suitable storage pools [{}].", 
this.getClass().getSimpleName(), storagePoolList.size(),
+                Arrays.toString(storagePoolList.toArray()));
     }
 
 }

Reply via email to