Bug 1646319 - dashboard not working while storage domain has size less than 1GB
Summary: dashboard not working while storage domain has size less than 1GB
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: ovirt-engine
Classification: oVirt
Component: Frontend.WebAdmin
Version: ---
Hardware: Unspecified
OS: Unspecified
low
medium
Target Milestone: ovirt-4.4.0
: ---
Assignee: rszwajko
QA Contact: Pavel Novotny
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2018-11-05 11:58 UTC by Petr Kubica
Modified: 2020-05-20 20:01 UTC (History)
5 users (show)

Fixed In Version: rhv-4.4.0-29
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2020-05-20 20:01:22 UTC
oVirt Team: UX
Embargoed:
pm-rhel: ovirt-4.4+
sgratch: planning_ack?
sgratch: devel_ack+
lleistne: testing_ack+


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
oVirt gerrit 107483 0 master MERGED webadmin: fix division by zero in storage queries 2020-04-14 12:27:46 UTC

Description Petr Kubica 2018-11-05 11:58:04 UTC
Description of problem:
When in environment is storage domain which size is less than 1GB, DWH will sample that domain as domain of size 0GB with available space 0GB, that cause exception division by zero while displaying dashboard so dashboard isn't displayed. See exception [1]

Fix:
Resizing storage domain and updating relevant tables in ovirt_engine_history database: storage_domain_hourly_history and storage_domain_samples_history (column: available_disk_size_gb and used_disk_size_gb) to values higher than 0 solved the problem


[1] 2018-11-05 10:13:31,293+01 ERROR [org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet] (default task-61) [] Unable to retrieve dashboard data: org.ovirt.engine.ui.frontend.server.dashboard.Dashboa
rdDataException: Error while running SQL query
        at org.ovirt.engine.ui.frontend.server.dashboard.dao.BaseDao.runQuery(BaseDao.java:60) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.dao.StorageDomainDwhDao.getStorageAverage(StorageDomainDwhDao.java:38) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.HeatMapHelper.getStorage(HeatMapHelper.java:31) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.lookupClusterUtilization(DashboardDataServlet.java:360) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.getDashboard(DashboardDataServlet.java:341) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.populateUtilizationCache(DashboardDataServlet.java:303) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.getDashboardFromCache(DashboardDataServlet.java:285) [frontend.jar:]
        at org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.doGet(DashboardDataServlet.java:263) [frontend.jar:]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) [jboss-servlet-api_3.1_spec.jar:1.0.0.Final-redhat-1]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec.jar:1.0.0.Final-redhat-1]
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.ovirt.engine.core.utils.servlet.HeaderFilter.doFilter(HeaderFilter.java:94) [utils.jar:]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.ovirt.engine.core.utils.servlet.CachingFilter.doFilter(CachingFilter.java:133) [utils.jar:]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.ovirt.engine.core.branding.BrandingFilter.doFilter(BrandingFilter.java:73) [branding.jar:]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.ovirt.engine.core.aaa.filters.SsoLoginFilter.doFilter(SsoLoginFilter.java:54) [aaa.jar:]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.ovirt.engine.core.utils.servlet.LocaleFilter.doFilter(LocaleFilter.java:65) [utils.jar:]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:65) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core.jar:1.4.18.SP8-redhat-1]
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1501)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1501)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1501)
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) [undertow-servlet.jar:1.4.18.SP8-redhat-1]
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:330) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812) [undertow-core.jar:1.4.18.SP8-redhat-1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_181]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_181]
        at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_181]
Caused by: org.postgresql.util.PSQLException: ERROR: division by zero
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
        at org.jboss.jca.adapters.jdbc.CachedPreparedStatement.executeQuery(CachedPreparedStatement.java:113)
        at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:504)
        at org.ovirt.engine.ui.frontend.server.dashboard.dao.BaseDao.runQuery(BaseDao.java:55) [frontend.jar:]
        ... 65 more


Version-Release number of selected component (if applicable):
ovirt-engine-dashboard-1.2.4-1.el7ev.noarch

How reproducible:
always

Steps to Reproduce:
1. have storage domain of size less than 1GB
2. wait for DWH sampling
3. see dashboard

Additional info:
DWH was up and running

Comment 1 Michal Skrivanek 2020-02-18 13:34:51 UTC
should be a simple fix of storage.last24hours_average in frontend/webadmin/modules/frontend/src/main/resources/org/ovirt/engine/ui/frontend/server/dashboard/dao/StorageDomainDwhDAO.properties

Comment 2 rszwajko 2020-03-09 09:26:38 UTC
As for now the problem can be re-created in 2 scenarios:  
1. dashboard using server cache
2. dashboard without server cache

Ad 1 If server cache is used then dashboard is displayed but the storage utilization data is missing. On the server following exception is logged:
2020-03-06 13:32:51,942+01 ERROR [org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.CacheUpdate.Utilization] (EE-ManagedScheduledExecutorService-default-Thread-1) [] Could not update the Utilization Cache: Error while running SQL query: org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataException: Error while running SQL query
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.dao.BaseDao.runQuery(BaseDao.java:60)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.dao.StorageDomainDwhDao.getStorageDomainUtilization(StorageDomainDwhDao.java:92)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.UtilizationHelper.populateStorageUtilizationDomains(UtilizationHelper.java:96)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.UtilizationHelper.populateStorageUtilization(UtilizationHelper.java:89)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.HourlySummaryHelper.getStorageSummary(HourlySummaryHelper.java:73)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.lookupGlobalUtilization(DashboardDataServlet.java:367)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.getDashboard(DashboardDataServlet.java:339)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.populateUtilizationCache(DashboardDataServlet.java:302)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.access$000(DashboardDataServlet.java:31)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet$1.run(DashboardDataServlet.java:114)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
        at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.internal.ManagedScheduledThreadPoolExecutor$ManagedScheduledFutureTask.access$201(ManagedScheduledThreadPoolExecutor.java:383)
        at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.internal.ManagedScheduledThreadPoolExecutor$ManagedScheduledFutureTask.run(ManagedScheduledThreadPoolExecutor.java:534)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl$ManagedThread.run(ManagedThreadFactoryImpl.java:250)
Caused by: org.postgresql.util.PSQLException: ERROR: division by zero

Ad 2 Dashboard can retrieve data directly - this can be forced by setting "Prefer: nocache" property in the header (see DashboardDataProvider.fetchData() in ui-extensions).
Then the dashboard fails to load and error message is displayed. On the server side following exception is logged:
2020-03-06 14:07:56,584+01 ERROR [org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet] (default task-28) [] Unable to retrieve dashboard data: org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataException: Error whil
e running SQL query
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.dao.BaseDao.runQuery(BaseDao.java:60)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.dao.StorageDomainDwhDao.getStorageDomainUtilization(StorageDomainDwhDao.java:92)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.UtilizationHelper.populateStorageUtilizationDomains(UtilizationHelper.java:96)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.UtilizationHelper.populateStorageUtilization(UtilizationHelper.java:89)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.HourlySummaryHelper.getStorageSummary(HourlySummaryHelper.java:73)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.lookupGlobalUtilization(DashboardDataServlet.java:367)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.getDashboard(DashboardDataServlet.java:339)
        at deployment.engine.ear.webadmin.war//org.ovirt.engine.ui.frontend.server.dashboard.DashboardDataServlet.doGet(DashboardDataServlet.java:259)
        at javax.servlet.api.0.Final//javax.servlet.http.HttpServlet.service(HttpServlet.java:503)
        ....
Caused by: org.postgresql.util.PSQLException: ERROR: division by zero

Comment 3 Sandro Bonazzola 2020-03-20 17:04:27 UTC
This bug is targeted to 4.4.2 and in modified state. can we re-target to 4.4.0 and move to QA?

Comment 4 Sharon Gratch 2020-03-25 17:55:24 UTC
(In reply to Sandro Bonazzola from comment #3)
> This bug is targeted to 4.4.2 and in modified state. can we re-target to
> 4.4.0 and move to QA?

yes, we can.

Comment 6 Pavel Novotny 2020-04-09 11:59:53 UTC
Verified in
ovirt-engine-4.4.0-0.31.master.el8ev.noarch
ovirt-engine-webadmin-portal-4.4.0-0.31.master.el8ev.noarch

Verification steps:
1. Add a data storage with size of 512 MB.
2. Wait few hours do DWH collects some storage usage samples.
3. Check the Webadmin Dashboard.

Result:
The Dashboard loads successfully and shows collected data about storage usage (it's basically 0.0 Available of 0 TiB / 0.0 TiB Used).

Comment 7 Sandro Bonazzola 2020-05-20 20:01:22 UTC
This bugzilla is included in oVirt 4.4.0 release, published on May 20th 2020.

Since the problem described in this bug report should be
resolved in oVirt 4.4.0 release, it has been closed with a resolution of CURRENT RELEASE.

If the solution does not work for you, please open a new bug report.


Note You need to log in before you can comment on or make changes to this bug.