Yair Zaslavsky has uploaded a new change for review.

Change subject: tools: DB connections improvement at notifier
......................................................................

tools: DB connections improvement at notifier

A performance issue (and maybe not the only one) exists at
NotificationService:
There is a loop over the result-set representing the
event subscrirbers. As long as the result-set object is active
the connection is held. in each iteration there is an attempt to
send mail - this operation may take time.
The patch seperates the DB  extraction of subscribers from the logic
that is done with each one of them

Bug-Id: https://bugzilla.redhat.com/show_bug.cgi?id=882847
Change-Id: I54fb540ee52255f017933b000b9b509c2e056122
Signed-off-by: Yair Zaslasky <[email protected]>
---
M 
backend/manager/tools/engine-notifier/engine-notifier-service/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
1 file changed, 24 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/35/9735/1

diff --git 
a/backend/manager/tools/engine-notifier/engine-notifier-service/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
 
b/backend/manager/tools/engine-notifier/engine-notifier-service/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
index 01ed4a9..395947c 100644
--- 
a/backend/manager/tools/engine-notifier/engine-notifier-service/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
+++ 
b/backend/manager/tools/engine-notifier/engine-notifier-service/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
@@ -6,6 +6,7 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -182,7 +183,7 @@
         Connection connection = null;
         PreparedStatement ps = null;
         ResultSet rs = null;
-
+        List<event_audit_log_subscriber> eventSubscribers  = new 
ArrayList<event_audit_log_subscriber>();
         try {
             connection = ds.getConnection();
             ps =
@@ -190,31 +191,8 @@
                             .prepareStatement("select * from 
event_audit_log_subscriber_view " +
                                     "where audit_log_id <= (select 
max(audit_log_id) from audit_log)");
             rs = ps.executeQuery();
-            event_audit_log_subscriber eventSubscriber;
-            DbUser dbUser = null;
-
             while (rs.next()) {
-                eventSubscriber = getEventAuditLogSubscriber(rs);
-                dbUser = getUserByUserId(eventSubscriber.getsubscriber_id());
-
-                if (dbUser != null) {
-                    EventSender method =
-                        
methodsMapper.getMethod(EventNotificationMethods.forValue(eventSubscriber.getmethod_id()));
-                    EventSenderResult sendResult = null;
-                    try {
-                        sendResult = method.send(eventSubscriber, 
dbUser.getemail());
-                    } catch (Exception e) {
-                        log.error("Failed to dispatch message", e);
-                        sendResult = new EventSenderResult();
-                        sendResult.setSent(false);
-                        sendResult.setReason(e.getMessage());
-                    }
-
-                    
addEventNotificationHistory(geteventNotificationHist(eventSubscriber,
-                            sendResult.isSent(),
-                            sendResult.getReason()));
-                    updateAuditLogEventProcessed(eventSubscriber);
-                }
+                eventSubscribers.add(getEventAuditLogSubscriber(rs));
             }
         } finally {
             if (rs != null) {
@@ -233,6 +211,27 @@
                 }
             }
         }
+        DbUser dbUser = null;
+        for (event_audit_log_subscriber eventSubscriber:eventSubscribers) {
+            dbUser = getUserByUserId(eventSubscriber.getsubscriber_id());
+            if (dbUser != null) {
+                EventSender method =
+                        
methodsMapper.getMethod(EventNotificationMethods.forValue(eventSubscriber.getmethod_id()));
+                EventSenderResult sendResult = null;
+                try {
+                    sendResult = method.send(eventSubscriber, 
dbUser.getemail());
+                } catch (Exception e) {
+                    log.error("Failed to dispatch message", e);
+                    sendResult = new EventSenderResult();
+                    sendResult.setSent(false);
+                    sendResult.setReason(e.getMessage());
+                }
+                
addEventNotificationHistory(geteventNotificationHist(eventSubscriber,
+                        sendResult.isSent(),
+                        sendResult.getReason()));
+                updateAuditLogEventProcessed(eventSubscriber);
+            }
+        }
     }
 
     private void updateAuditLogEventProcessed(event_audit_log_subscriber 
eventSubscriber) throws SQLException {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I54fb540ee52255f017933b000b9b509c2e056122
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yair Zaslavsky <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to