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

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


The following commit(s) were added to refs/heads/4.19 by this push:
     new 2ca0857bd59 api: listVM API improvement followup, change returning of 
stats detail (#9177)
2ca0857bd59 is described below

commit 2ca0857bd59fbba87ccf3cfec57041ef5bff52a1
Author: Rohit Yadav <rohit.ya...@shapeblue.com>
AuthorDate: Fri Jun 14 11:03:14 2024 +0530

    api: listVM API improvement followup, change returning of stats detail 
(#9177)
    
    - Changes behaviour of details param handling via global setting:
      - listVirtualMachines API: when the details param is not provided, it 
returns whether stats are returned controlled by a new global setting 
`list.vm.default.details.stats`
      - listVirtualMachinesMetrics API: when the details param is not provided, 
it uses `all` details including `stats`
    - Users who are affected slow performance of the listVirtualMachines API 
response time can set `list.vm.default.details.stats` to `false`
    - Remove ConfigKey vm.stats.increment.metrics.in.memory which was renamed 
to `vm.stats.increment.metrics` in #5984 and also remove unused/unnecessary 
global settings via upgrade path
    - Changes default value of VM stats accumulation setting 
`vm.stats.increment.metrics` to false until a better solution emerges. Since 
#5984, this is true and during the execution of listVM APIs the stats are 
clubbed/calculated which can immensely slow down list VM API calls. Any costly 
operations such as summing of stats shouldn't be done during the course of a 
synchronous API, such as the list VM API.
    - Fix UI that uses listVirtualMachinesMetrics to not call `stats` detail 
when in list view without metrics selected.
    
    Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>
---
 .../java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java  | 4 ++--
 api/src/main/java/org/apache/cloudstack/query/QueryService.java     | 5 ++---
 .../src/main/resources/META-INF/db/schema-41900to41910-cleanup.sql  | 4 ++++
 server/src/main/java/com/cloud/server/StatsCollector.java           | 6 +-----
 ui/src/config/section/compute.js                                    | 4 ++--
 ui/src/views/AutogenView.vue                                        | 1 +
 6 files changed, 12 insertions(+), 12 deletions(-)

diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java 
b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
index 4abccfd1da8..37b702e166a 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
@@ -99,8 +99,8 @@ public class ListVMsCmd extends 
BaseListRetrieveOnlyResourceCountCmd implements
                collectionType = CommandType.STRING,
                description = "comma separated list of vm details requested, "
                    + "value can be a list of [all, group, nics, stats, secgrp, 
tmpl, servoff, diskoff, backoff, iso, volume, min, affgrp]."
-                   + " If no parameter is passed in, the details will be 
defaulted to all. When return.vm.stats.on.vm.list is true, the default" +
-                       "details change to [group, nics, secgrp, tmpl, servoff, 
diskoff, backoff, iso, volume, min, affgrp], thus the stats will not be 
returned. ")
+                   + " When no parameters are passed, all the details are 
returned if list.vm.default.details.stats is true (default),"
+                   + " otherwise when list.vm.default.details.stats is false 
the API response will exclude the stats details.")
     private List<String> viewDetails;
 
     @Parameter(name = ApiConstants.TEMPLATE_ID, type = CommandType.UUID, 
entityType = TemplateResponse.class, description = "list vms by template")
diff --git a/api/src/main/java/org/apache/cloudstack/query/QueryService.java 
b/api/src/main/java/org/apache/cloudstack/query/QueryService.java
index dd5aaf4e6d7..4c53314aef5 100644
--- a/api/src/main/java/org/apache/cloudstack/query/QueryService.java
+++ b/api/src/main/java/org/apache/cloudstack/query/QueryService.java
@@ -125,9 +125,8 @@ public interface QueryService {
     static final ConfigKey<Boolean> SharePublicTemplatesWithOtherDomains = new 
ConfigKey<>("Advanced", Boolean.class, 
"share.public.templates.with.other.domains", "true",
             "If false, templates of this domain will not show up in the list 
templates of other domains.", true, ConfigKey.Scope.Domain);
 
-    ConfigKey<Boolean> ReturnVmStatsOnVmList = new ConfigKey<>("Advanced", 
Boolean.class, "return.vm.stats.on.vm.list", "true",
-            "If false, changes the listVirtualMachines default details to 
[group, nics, secgrp, tmpl, servoff, diskoff, backoff, iso, volume, min, 
affgrp], so that the VMs' stats" +
-                    " are not returned by default when listing VMs; only when 
the 'stats' or 'all' detail is informed.", true, ConfigKey.Scope.Global);
+    ConfigKey<Boolean> ReturnVmStatsOnVmList = new ConfigKey<>("Advanced", 
Boolean.class, "list.vm.default.details.stats", "true",
+            "Determines whether VM stats should be returned when details are 
not explicitly specified in listVirtualMachines API request. When false, 
details default to [group, nics, secgrp, tmpl, servoff, diskoff, backoff, iso, 
volume, min, affgrp]. When true, all details are returned including 'stats'.", 
true, ConfigKey.Scope.Global);
 
     ListResponse<UserResponse> searchForUsers(ListUsersCmd cmd) throws 
PermissionDeniedException;
 
diff --git 
a/engine/schema/src/main/resources/META-INF/db/schema-41900to41910-cleanup.sql 
b/engine/schema/src/main/resources/META-INF/db/schema-41900to41910-cleanup.sql
index b580d42686f..2d57db2b778 100644
--- 
a/engine/schema/src/main/resources/META-INF/db/schema-41900to41910-cleanup.sql
+++ 
b/engine/schema/src/main/resources/META-INF/db/schema-41900to41910-cleanup.sql
@@ -18,3 +18,7 @@
 --;
 -- Schema upgrade cleanup from 4.19.0.0 to 4.19.1.0
 --;
+
+-- List VMs response optimisation, don't sum during API handling
+UPDATE cloud.configuration set value='false' where 
name='vm.stats.increment.metrics';
+DELETE from cloud.configuration where 
name='vm.stats.increment.metrics.in.memory';
diff --git a/server/src/main/java/com/cloud/server/StatsCollector.java 
b/server/src/main/java/com/cloud/server/StatsCollector.java
index 2467416155a..7f4cc2f757e 100644
--- a/server/src/main/java/com/cloud/server/StatsCollector.java
+++ b/server/src/main/java/com/cloud/server/StatsCollector.java
@@ -278,12 +278,9 @@ public class StatsCollector extends ManagerBase implements 
ComponentMethodInterc
     private static final ConfigKey<String> statsOutputUri = new 
ConfigKey<>("Advanced", String.class, "stats.output.uri", "",
             "URI to send StatsCollector statistics to. The collector is 
defined on the URI scheme. Example: graphite://graphite-hostaddress:port or 
influxdb://influxdb-hostaddress/dbname. Note that the port is optional, if not 
added the default port for the respective collector (graphite or influxdb) will 
be used. Additionally, the database name '/dbname' is  also optional; default 
db name is 'cloudstack'. You must create and configure the database if using 
influxdb.",
             true);
-    protected static ConfigKey<Boolean> vmStatsIncrementMetrics = new 
ConfigKey<>("Advanced", Boolean.class, "vm.stats.increment.metrics", "true",
+    protected static ConfigKey<Boolean> vmStatsIncrementMetrics = new 
ConfigKey<>("Advanced", Boolean.class, "vm.stats.increment.metrics", "false",
             "When set to 'true', VM metrics(NetworkReadKBs, NetworkWriteKBs, 
DiskWriteKBs, DiskReadKBs, DiskReadIOs and DiskWriteIOs) that are collected 
from the hypervisor are summed before being returned."
                     + "On the other hand, when set to 'false', the VM metrics 
API will just display the latest metrics collected.", true);
-    private static final ConfigKey<Boolean> 
VM_STATS_INCREMENT_METRICS_IN_MEMORY = new ConfigKey<>("Advanced", 
Boolean.class, "vm.stats.increment.metrics.in.memory", "true",
-            "When set to 'true', VM metrics(NetworkReadKBs, NetworkWriteKBs, 
DiskWriteKBs, DiskReadKBs, DiskReadIOs and DiskWriteIOs) that are collected 
from the hypervisor are summed and stored in memory. "
-            + "On the other hand, when set to 'false', the VM metrics API will 
just display the latest metrics collected.", true);
     protected static ConfigKey<Integer> vmStatsMaxRetentionTime = new 
ConfigKey<>("Advanced", Integer.class, "vm.stats.max.retention.time", "720",
             "The maximum time (in minutes) for keeping VM stats records in the 
database. The VM stats cleanup process will be disabled if this is set to 0 or 
less than 0.", true);
 
@@ -2131,7 +2128,6 @@ public class StatsCollector extends ManagerBase 
implements ComponentMethodInterc
     public ConfigKey<?>[] getConfigKeys() {
         return new ConfigKey<?>[] {vmDiskStatsInterval, 
vmDiskStatsIntervalMin, vmNetworkStatsInterval, vmNetworkStatsIntervalMin, 
StatsTimeout, statsOutputUri,
             vmStatsIncrementMetrics, vmStatsMaxRetentionTime, 
vmStatsCollectUserVMOnly, vmDiskStatsRetentionEnabled, 
vmDiskStatsMaxRetentionTime,
-                VM_STATS_INCREMENT_METRICS_IN_MEMORY,
                 MANAGEMENT_SERVER_STATUS_COLLECTION_INTERVAL,
                 DATABASE_SERVER_STATUS_COLLECTION_INTERVAL,
                 DATABASE_SERVER_LOAD_HISTORY_RETENTION_NUMBER};
diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js
index 4893cfc1053..57177d0da93 100644
--- a/ui/src/config/section/compute.js
+++ b/ui/src/config/section/compute.js
@@ -32,9 +32,9 @@ export default {
       getApiToCall: () => store.getters.metrics ? 'listVirtualMachinesMetrics' 
: 'listVirtualMachines',
       resourceType: 'UserVm',
       params: () => {
-        var params = { details: 'servoff,tmpl,iso,nics,backoff' }
+        var params = { details: 
'group,nics,secgrp,tmpl,servoff,diskoff,iso,volume,affgrp' }
         if (store.getters.metrics) {
-          params = { details: 'servoff,tmpl,iso,nics,backoff,stats' }
+          params = { details: 'all,stats' }
         }
         params.isvnf = false
         return params
diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue
index f9c4edd36b0..480b2f86f03 100644
--- a/ui/src/views/AutogenView.vue
+++ b/ui/src/views/AutogenView.vue
@@ -904,6 +904,7 @@ export default {
       if (['listVirtualMachinesMetrics'].includes(this.apiName) && 
this.dataView) {
         delete params.details
         delete params.isvnf
+        params.details = 
'group,nics,secgrp,tmpl,servoff,diskoff,iso,volume,affgrp'
       }
 
       this.loading = true

Reply via email to