From 28c304319ad03dd0f367535f89ab39367d72f1c2 Mon Sep 17 00:00:00 2001 From: Patrick Huang Date: Tue, 17 Mar 2015 14:50:12 +1000 Subject: [PATCH] rhbz1197902 - clear hibernate session after each translation batch save --- docs/release-notes.md | 3 ++- .../java/org/zanata/model/HTextFlowTarget.java | 4 ++-- .../java/org/zanata/async/AsyncTaskManager.java | 2 +- .../service/impl/TranslationServiceImpl.java | 14 ++++++++------ .../src/test/resources/arquillian/persistence.xml | 6 ++++-- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 9ac276c082..d5bd694a66 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -77,6 +77,7 @@ Zanata now requires JMS to be configured in standalone.xml in order to queue up * [1186997](https://bugzilla.redhat.com/show_bug.cgi?id=1186997) - Introduction of hornetq-ra breaks the overlay installer * [1192271](https://bugzilla.redhat.com/show_bug.cgi?id=1192271) - For gettext plural project, project-version statistics was inconsistent between language and document, sometime more than 100% * [1193699](https://bugzilla.redhat.com/show_bug.cgi?id=1193699) - Bookmarked url (selected language or selected doc) in version page, bookmarked url selected language, selected project in version-group page not working +* [1197902](https://bugzilla.redhat.com/show_bug.cgi?id=1197902) - Large translated document push times are inconsistent ----------------------- @@ -237,4 +238,4 @@ Zanata now requires JMS to be configured in standalone.xml in order to queue up * [1060621](https://bugzilla.redhat.com/show_bug.cgi?id=1060621) - [Regression] Validation warnings panel not displayed * [1044768](https://bugzilla.redhat.com/show_bug.cgi?id=1044768) - Zanata does not pull the latest changes in translation due to unchanged ETags * [1063112](https://bugzilla.redhat.com/show_bug.cgi?id=1063112) - Client push in dryRun mode should not invoke CopyTrans -* [1069428](https://bugzilla.redhat.com/show_bug.cgi?id=1069428) - Various concurrency problems due to unsafe Seam injections \ No newline at end of file +* [1069428](https://bugzilla.redhat.com/show_bug.cgi?id=1069428) - Various concurrency problems due to unsafe Seam injections diff --git a/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java b/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java index 58e865e23e..6654c3f3f8 100644 --- a/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java +++ b/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java @@ -149,8 +149,8 @@ public HTextFlowTarget(HTextFlow textFlow, @Nonnull HLocale locale) { // TODO PERF @NaturalId(mutable=false) for better criteria caching @NaturalId - @ManyToOne - @JoinColumn(name = "locale", nullable = false) + @ManyToOne(optional = false) + @JoinColumn(name = "locale", nullable = false, updatable = false) @Field(analyze = Analyze.NO) @FieldBridge(impl = LocaleIdBridge.class) public @Nonnull diff --git a/zanata-war/src/main/java/org/zanata/async/AsyncTaskManager.java b/zanata-war/src/main/java/org/zanata/async/AsyncTaskManager.java index bd243c0eca..813e621ffb 100644 --- a/zanata-war/src/main/java/org/zanata/async/AsyncTaskManager.java +++ b/zanata-war/src/main/java/org/zanata/async/AsyncTaskManager.java @@ -101,7 +101,7 @@ public void execute() { taskFuture.set(returnValue); } catch (Throwable t) { taskFuture.setException(t); - log.warn( + log.error( "Exception when executing an asynchronous task.", t); } } diff --git a/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java index 7ffe9a8425..3fa4d7d8bd 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java @@ -111,9 +111,6 @@ public class TranslationServiceImpl implements TranslationService { @In private DocumentDAO documentDAO; - @In - private PersonDAO personDAO; - @In private TextFlowDAO textFlowDAO; @@ -628,6 +625,7 @@ protected Boolean work() throws Exception { } }.workInTransaction(); } catch (Exception e) { + log.error("exception in transferFromTranslationsResourceExtensions: {}", e.getMessage()); throw new ZanataServiceException("Error during translation.", 500, e); } @@ -666,6 +664,7 @@ protected Boolean work() throws Exception { work.setAssignCreditToUploader(assignCreditToUploader); changed |= work.workInTransaction(); } catch (Exception e) { + log.error("exception in SaveBatchWork:{}", e.getMessage()); throw new ZanataServiceException("Error during translation.", 500, e); } @@ -700,6 +699,7 @@ protected Void work() throws Exception { .getLocaleId())); } } catch (Exception e) { + log.error("exception in removeTargets: {}", e.getMessage()); throw new ZanataServiceException("Error during translation.", 500, e); } @@ -736,6 +736,10 @@ private final class SaveBatchWork extends Work { @Override protected Boolean work() throws Exception { + // we need to call clear at the beginning because text flow target + // history rely on after commit callback. + textFlowTargetDAO.clear(); + document = entityManager.find(HDocument.class, document.getId()); boolean changed = false; // we need a fresh object in this session, @@ -829,7 +833,7 @@ public String apply(TextFlowTarget input) { changed = true; Long actorId; - if(assignCreditToUploader){ + if (assignCreditToUploader){ HPerson hPerson = authenticatedAccount.getPerson(); hTarget.setTranslator(hPerson); hTarget.setLastModifiedBy(hPerson); @@ -848,8 +852,6 @@ public String apply(TextFlowTarget input) { handleOp.get().increaseProgress(1); } } - // every batch will start with a new hibernate session therefore no - // need to call clear textFlowTargetDAO.flush(); return changed; diff --git a/zanata-war/src/test/resources/arquillian/persistence.xml b/zanata-war/src/test/resources/arquillian/persistence.xml index 5ca22dadce..7622f8846a 100755 --- a/zanata-war/src/test/resources/arquillian/persistence.xml +++ b/zanata-war/src/test/resources/arquillian/persistence.xml @@ -5,10 +5,10 @@ version="2.0"> + transaction-type="JTA"> org.hibernate.ejb.HibernatePersistence - java:jboss/datasources/zanataTestDatasource + java:jboss/datasources/zanataTestDatasource