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
