Change in ovirt-engine[ovirt-engine-3.6]: core: storage_domain_shared_status SQL calculation

tnisan at redhat.com tnisan at redhat.com
Thu Jun 2 12:26:35 UTC 2016


Tal Nisan has submitted this change and it was merged.

Change subject: core: storage_domain_shared_status SQL calculation
......................................................................


core: storage_domain_shared_status SQL calculation

A storage domain's shared status was calculated by the
fn_get_storage_domain_shared_status_by_domain_id function, which posed
several performance issues, as it forced the switching between pgplsql
and sql contexts several times, not to mention performing DML and even
potentially DDL operations as part of the flow.

Additionally, this function was phrased in a convoluted and hard to
understand fashion, making it hard to maintain. The old logic, before
this patch, was as follows:

IF (domain.type != ISO) THEN
        IF (domain not attached to a pool) THEN
                RETURN Unattached
        ELSE IF (domain.status == Active) THEN
                RETURN Active
        ELSE
                RETURN Inactive
        ENDIF
ELSE
        IF (num of distinct statuses == 0) THEN
                RETURN Unattached
        ELSE IF (num of distinct statuses == 1) THEN
                IF (domain.status == Active) THEN
                        RETURN Active
                ELSE
                        RETURN Inactive
                ENDIF
        ELSE
                IF (domain is active in at lest one pool) THEN
                        RETURN Mixed
                ELSE
                        RETURN Inactive
                END
        END
END

This logic can clearly be simplified. First and foremost, the special
treatment for an ISO domain should be removed. Instead, a general
treatment for a domain with multiple pools should be set in place, where
ISO just happens to be the only type that supports this. The refactored
logic should handle two variables: the number of distinct statuses a
domain has and the number of active statuses it has:

IF (num_distinct_statuses) == 0 THEN
        RETURN Unattached
ELSE IF (num_active_statuses > 0) THEN
        IF (num_distinct_statuses > 1) THEN
                RETURN Mixed
        ELSE
                RETURN Active
ELSE
        RETURN Inactive
END

This logic can easily be expressed as an SQL query which can be joined
on and save the context switches associated with a pgplsql function.

Bug-Url: https://bugzilla.redhat.com/1337257
Change-Id: I9c1695a41e7a9ca3fb32cbbbfc8fc8e4ae80f6ef
Signed-off-by: Allon Mureinik <amureini at redhat.com>
---
M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDaoTest.java
M packaging/dbscripts/create_dwh_views.sql
M packaging/dbscripts/create_functions.sql
M packaging/dbscripts/create_views.sql
4 files changed, 34 insertions(+), 95 deletions(-)

Approvals:
  Eli Mesika: Looks good to me, but someone else must approve
  Jenkins CI: Passed CI tests
  Allon Mureinik: Verified
  Maor Lipchuk: Looks good to me, approved



-- 
To view, visit https://gerrit.ovirt.org/58451
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I9c1695a41e7a9ca3fb32cbbbfc8fc8e4ae80f6ef
Gerrit-PatchSet: 4
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.6
Gerrit-Owner: Allon Mureinik <amureini at redhat.com>
Gerrit-Reviewer: Allon Mureinik <amureini at redhat.com>
Gerrit-Reviewer: Eldad Marciano <emarcian at redhat.com>
Gerrit-Reviewer: Eli Mesika <emesika at redhat.com>
Gerrit-Reviewer: Freddy Rolland <frolland at redhat.com>
Gerrit-Reviewer: Jenkins CI
Gerrit-Reviewer: Liron Aravot <laravot at redhat.com>
Gerrit-Reviewer: Maor Lipchuk <mlipchuk at redhat.com>
Gerrit-Reviewer: Shirly Radco <sradco at redhat.com>
Gerrit-Reviewer: Tal Nisan <tnisan at redhat.com>
Gerrit-Reviewer: gerrit-hooks <automation at ovirt.org>



More information about the Engine-commits mailing list