Liran Zelkha has uploaded a new change for review.

Change subject: core: Improve audit_log seach query
......................................................................

core: Improve audit_log seach query

This patch improves the performance of the SearchQuery mechanism
for the audit_log table.

Change-Id: I396a90d63a10fc049a37e4792d3e558ff2a7fea3
Bug-Url: https://bugzilla.redhat.com/1056064
Signed-off-by: lzel...@redhat.com <lzel...@redhat.com>
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
M 
backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
2 files changed, 46 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/24048/1

diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
index 561bbbd..f0e77f7 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
@@ -889,6 +889,9 @@
                 sortExpr.append(mSearchObjectAC.getDefaultSort(searchObjStr));
             }
 
+            // TODO: The database configuration PostgresSearchTemplate has an 
extra closing braces. Hence our
+            // queries in this code have an extra opening one. Fix it in a 
future patch.
+
             // only audit log search supports the SearchFrom which enables 
getting records starting from a certain
             // audit_log_id, this is done to make search queries from the 
client more efficient and eliminate the client
             // from registering to such queries and comparing last data with 
previous.
@@ -899,14 +902,19 @@
                             .format("SELECT * FROM %1$s WHERE ( %2$s > %3$s 
and not deleted",
                                     tableNameWithOutTags, primeryKey,
                                     syntax.getSearchFrom());
+                } else if (whereBuilder.size() == 1 && 
wherePhrase.toString().contains("severity")) {
+                    inQuery =
+                            StringFormat.format("SELECT %1$s.* FROM %2$s %3$s 
and (not deleted",
+                                    tableName,
+                                    fromStatement,
+                                    wherePhrase);
                 } else {
                     inQuery = StringFormat
                             .format("SELECT * FROM %1$s WHERE ( %2$s > %3$s 
and %2$s IN (%4$s) and not deleted",
                                     tableNameWithOutTags, primeryKey,
                                     syntax.getSearchFrom(), innerQuery);
                 }
-            }
-            else if (primeryKey.equals("vmt_guid") && wherePhrase.length() > 0
+            } else if (primeryKey.equals("vmt_guid") && wherePhrase.length() > 0
                     && wherePhrase.toString().contains("storage_pool_name") && 
whereBuilder.size() == 1) {
                 inQuery = StringFormat
                         .format("(SELECT * FROM %1$s %2$s",
diff --git 
a/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
 
b/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
index 312566d..aecc0ad 100644
--- 
a/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
+++ 
b/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
@@ -4,9 +4,16 @@
 
 import java.util.Arrays;
 
+import junit.framework.Assert;
+
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.mockito.Mockito;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigCommon;
 import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.config.IConfigUtilsInterface;
 import org.ovirt.engine.core.utils.MockConfigRule;
 
 public class SyntaxCheckerTest {
@@ -16,6 +23,21 @@
 
     public boolean contains(SyntaxContainer res, String item) {
         return Arrays.asList(res.getCompletionArray()).contains(item);
+    }
+
+    @Before
+    public void setup() {
+        final IConfigUtilsInterface configUtils = 
Mockito.mock(IConfigUtilsInterface.class);
+        Mockito.when(configUtils.getValue(ConfigValues.SearchResultsLimit, 
ConfigCommon.defaultConfigurationVersion))
+                .thenReturn(100);
+        Mockito.when(configUtils.getValue(ConfigValues.DBPagingType, 
ConfigCommon.defaultConfigurationVersion))
+                .thenReturn("Range");
+        Mockito.when(configUtils.getValue(ConfigValues.DBSearchTemplate, 
ConfigCommon.defaultConfigurationVersion))
+                .thenReturn("SELECT * FROM (%2$s) %1$s) as T1 %3$s");
+        Mockito.when(configUtils.getValue(ConfigValues.DBPagingSyntax, 
ConfigCommon.defaultConfigurationVersion))
+                .thenReturn("OFFSET (%1$s -1) LIMIT %2$s");
+
+        Config.setConfigUtils(configUtils);
     }
 
     /**
@@ -41,6 +63,7 @@
      * Test the following where each word should be the completion for the 
earlier portion Host : sortby migrating_vms
      * asc
      */
+    @Test
     public void testHostCompletion() {
         SyntaxChecker chkr = new SyntaxChecker(20);
         SyntaxContainer res = null;
@@ -75,4 +98,17 @@
         // check valid config values
         assertTrue(chkr.getPagePhrase(res, "1") != "");
     }
+
+    @Test
+    public void testAlerts() {
+        SyntaxChecker chkr = new SyntaxChecker(100);
+
+        ISyntaxChecker curSyntaxChecker = 
SyntaxCheckerFactory.createBackendSyntaxChecker("foo");
+
+        SyntaxContainer res = curSyntaxChecker.analyzeSyntaxState("Events: 
severity=error", true);
+        String query = chkr.generateQueryFromSyntaxContainer(res, true);
+        Assert.assertEquals("SELECT * FROM (SELECT audit_log.* FROM  audit_log 
  WHERE  audit_log.severity = '2'  and (not deleted)  ORDER BY audit_log_id 
DESC ) as T1 OFFSET (1 -1) LIMIT 0",
+                query);
+    }
+
 }


-- 
To view, visit http://gerrit.ovirt.org/24048
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I396a90d63a10fc049a37e4792d3e558ff2a7fea3
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Liran Zelkha <lzel...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to