Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Async task framework refactoring
Browse files Browse the repository at this point in the history
Pull Request: #606
This is the new async framework which lays the ground for the CDI version.

Squashed commit of the following:

commit 9fcd562
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Thu Oct 16 16:29:29 2014 +1000

    Fix transaction missing error when pushing.

commit de8c56e
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Tue Oct 14 16:54:07 2014 +1000

    Fix code styling issues.

    Also add some tests.

commit 57bab71
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Tue Oct 14 09:36:16 2014 +1000

    Revert arquillian.xml changes.

commit 664fecf
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Mon Oct 13 16:47:54 2014 +1000

    Replace async package with async2.

    Removed the old package and renamed async2 to the old name.

commit ae1da24
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Mon Oct 13 16:04:19 2014 +1000

    Move source and translated doc push to new async framework.

commit 891ae93
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Mon Oct 13 13:56:25 2014 +1000

    Migrate Zip File building to the new async framework.

commit 2256c1a
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Thu Oct 9 16:06:50 2014 +1000

    Migrate Copy Version to the new async framework.

commit 6772a89
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Thu Oct 9 13:41:46 2014 +1000

    Migrate Copy trans to the new async framework.

commit f712306
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Tue Oct 7 16:17:30 2014 +1000

    Migrate Reindexing to the new Async service.

commit 112bcc1
Author: Carlos A. Munoz <camunoz@redhat.com>
Date:   Tue Oct 7 16:17:09 2014 +1000

    New Asynchronous framework.

    Behaves similarly to what a CDI implementation would.
  • Loading branch information
Carlos A. Munoz committed Oct 17, 2014
1 parent 19ee1dd commit 73e7e2c
Show file tree
Hide file tree
Showing 57 changed files with 1,699 additions and 1,572 deletions.
10 changes: 5 additions & 5 deletions zanata-war/src/main/java/org/zanata/action/CopyTransAction.java
Expand Up @@ -30,7 +30,7 @@
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;
import org.zanata.async.tasks.CopyTransTask;
import org.zanata.async.handle.CopyTransTaskHandle;
import org.zanata.dao.ProjectIterationDAO;
import org.zanata.i18n.Messages;
import org.zanata.model.HCopyTransOptions;
Expand Down Expand Up @@ -98,7 +98,7 @@ public void updateCopyTrans(String action, String value) {

@Override
public String getCompletedPercentage() {
CopyTransTask.CopyTransTaskHandle handle =
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
if (handle != null) {
Expand Down Expand Up @@ -150,7 +150,7 @@ public void cancel() {
}

public String getCurrentProgress() {
CopyTransTask.CopyTransTaskHandle handle =
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
if (handle != null) {
Expand All @@ -160,7 +160,7 @@ public String getCurrentProgress() {
}

public String getMaxProgress() {
CopyTransTask.CopyTransTaskHandle handle =
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
if (handle != null) {
Expand All @@ -170,7 +170,7 @@ public String getMaxProgress() {
}

public String getCopyTransEstimatedTimeLeft() {
CopyTransTask.CopyTransTaskHandle handle =
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
if (handle != null) {
Expand Down
48 changes: 27 additions & 21 deletions zanata-war/src/main/java/org/zanata/action/CopyTransManager.java
Expand Up @@ -24,26 +24,26 @@

import javax.annotation.Nonnull;

import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import lombok.extern.slf4j.Slf4j;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.Identity;
import org.zanata.async.tasks.CopyTransTask;
import org.zanata.async.tasks.DocumentCopyTransTask;
import org.zanata.async.tasks.IterationCopyTransTask;
import org.zanata.async.AsyncTaskHandle;
import org.zanata.async.AsyncTaskHandleManager;
import org.zanata.async.handle.CopyTransTaskHandle;
import org.zanata.model.HCopyTransOptions;
import org.zanata.model.HDocument;
import org.zanata.model.HProjectIteration;
import org.zanata.service.AsyncTaskManagerService;

import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import static org.zanata.async.tasks.CopyTransTask.CopyTransTaskHandle;
import org.zanata.service.CopyTransService;

/**
* Manager Bean that keeps track of manual copy trans being run in the system,
Expand All @@ -55,12 +55,16 @@
@AutoCreate
@Name("copyTransManager")
@Scope(ScopeType.STATELESS)
@Slf4j
// TODO This class should be merged with the copy trans service (?)
public class CopyTransManager implements Serializable {
private static final long serialVersionUID = 1L;

@In
private AsyncTaskManagerService asyncTaskManagerServiceImpl;
private AsyncTaskHandleManager asyncTaskHandleManager;

@In
private CopyTransService copyTransServiceImpl;

@In
private Identity identity;
Expand All @@ -77,9 +81,7 @@ public boolean isCopyTransRunning(@Nonnull Object target) {
"Copy Trans can only run for HProjectIteration and HDocument");
}

CopyTransTaskHandle handle =
(CopyTransTaskHandle) asyncTaskManagerServiceImpl
.getHandleByKey(key);
AsyncTaskHandle handle = asyncTaskHandleManager.getHandleByKey(key);
return handle != null && !handle.isDone();
}

Expand All @@ -106,8 +108,10 @@ public void startCopyTrans(HDocument document, HCopyTransOptions options) {
}

CopyTransProcessKey key = CopyTransProcessKey.getKey(document);
CopyTransTask task = new DocumentCopyTransTask(document, options);
asyncTaskManagerServiceImpl.startTask(task, key);
CopyTransTaskHandle handle = new CopyTransTaskHandle();
asyncTaskHandleManager.registerTaskHandle(handle, key);
copyTransServiceImpl.startCopyTransForDocument(document, options,
handle);
}

/**
Expand All @@ -123,8 +127,10 @@ public void startCopyTrans(HProjectIteration iteration,
}

CopyTransProcessKey key = CopyTransProcessKey.getKey(iteration);
CopyTransTask task = new IterationCopyTransTask(iteration, options);
asyncTaskManagerServiceImpl.startTask(task, key);
CopyTransTaskHandle handle = new CopyTransTaskHandle();
asyncTaskHandleManager.registerTaskHandle(handle, key);
copyTransServiceImpl.startCopyTransForIteration(iteration, options,
handle);
}

public CopyTransTaskHandle getCopyTransProcessHandle(@Nonnull Object target) {
Expand All @@ -138,7 +144,7 @@ public CopyTransTaskHandle getCopyTransProcessHandle(@Nonnull Object target) {
throw new IllegalArgumentException(
"Copy Trans can only run for HProjectIteration and HDocument");
}
return (CopyTransTaskHandle) asyncTaskManagerServiceImpl
return (CopyTransTaskHandle) asyncTaskHandleManager
.getHandleByKey(key);
}

Expand All @@ -147,7 +153,7 @@ public void cancelCopyTrans(HProjectIteration iteration) {
CopyTransProcessKey key = CopyTransProcessKey.getKey(iteration);
CopyTransTaskHandle handle =
this.getCopyTransProcessHandle(iteration);
handle.forceCancel();
handle.cancel(true);
handle.setCancelledTime(System.currentTimeMillis());
handle.setCancelledBy(identity.getCredentials().getUsername());
}
Expand Down
37 changes: 21 additions & 16 deletions zanata-war/src/main/java/org/zanata/action/CopyVersionManager.java
@@ -1,59 +1,64 @@
package org.zanata.action;

import static org.zanata.async.tasks.CopyVersionTask.CopyVersionTaskHandle;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.Identity;
import org.zanata.async.tasks.CopyVersionTask;
import org.zanata.service.AsyncTaskManagerService;

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.zanata.async.AsyncTaskHandleManager;
import org.zanata.async.handle.CopyVersionTaskHandle;
import org.zanata.service.CopyVersionService;

/**
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
* @author Carlos Munoz <a href="mailto:camunoz@redhat.com">aeng@redhat.com</a>
*/
@AutoCreate
@Name("copyVersionManager")
@Scope(ScopeType.STATELESS)
@Slf4j
public class CopyVersionManager implements Serializable {
@In
private AsyncTaskManagerService asyncTaskManagerServiceImpl;
private AsyncTaskHandleManager asyncTaskHandleManager;

@In
private CopyVersionService copyVersionServiceImpl;

@In
private Identity identity;

public void startCopyVersion(String projectSlug, String versionSlug,
String newVersionSlug) {
asyncTaskManagerServiceImpl.startTask(new CopyVersionTask(
projectSlug, versionSlug, newVersionSlug),
CopyVersionKey.getKey(projectSlug, newVersionSlug));
CopyVersionKey key = CopyVersionKey.getKey(projectSlug, newVersionSlug);
CopyVersionTaskHandle handle = new CopyVersionTaskHandle();
asyncTaskHandleManager.registerTaskHandle(handle, key);
copyVersionServiceImpl.startCopyVersion(projectSlug, versionSlug,
newVersionSlug, handle);
}

public void cancelCopyVersion(String projectSlug, String versionSlug) {
if (isCopyVersionRunning(projectSlug, versionSlug)) {
CopyVersionTaskHandle handle =
getCopyVersionProcessHandle(projectSlug, versionSlug);
handle.forceCancel();
handle.cancel(true);
handle.setCancelledTime(System.currentTimeMillis());
handle.setCancelledBy(identity.getCredentials().getUsername());

log.info("Copy version cancelled- {}:{}", projectSlug, versionSlug);
}
}

public CopyVersionTask.CopyVersionTaskHandle getCopyVersionProcessHandle(
public CopyVersionTaskHandle getCopyVersionProcessHandle(
String projectSlug, String versionSlug) {
return (CopyVersionTask.CopyVersionTaskHandle) asyncTaskManagerServiceImpl
return (CopyVersionTaskHandle) asyncTaskHandleManager
.getHandleByKey(CopyVersionKey.getKey(projectSlug, versionSlug));
}

Expand Down
Expand Up @@ -30,7 +30,7 @@
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;
import org.zanata.async.AsyncTaskHandle;
import org.zanata.service.AsyncTaskManagerService;
import org.zanata.async.AsyncTaskHandleManager;

/**
* @author Carlos Munoz <a
Expand All @@ -41,19 +41,19 @@
@Restrict("#{s:hasRole('admin')}")
public class ProcessManagerAction {
@In
private AsyncTaskManagerService asyncTaskManagerServiceImpl;
private AsyncTaskHandleManager asyncTaskHandleManager;

public Collection<AsyncTaskHandle> getRunningProcesses() {
ArrayList<AsyncTaskHandle> allHandles =
new ArrayList<AsyncTaskHandle>();
allHandles.addAll(asyncTaskManagerServiceImpl.getAllHandles());
allHandles.addAll(asyncTaskHandleManager.getAllHandles());

return allHandles;
}

public int getRunningCount() {
int running = 0;
for (AsyncTaskHandle h : asyncTaskManagerServiceImpl.getAllHandles()) {
for (AsyncTaskHandle h : asyncTaskHandleManager.getAllHandles()) {
if (!h.isDone()) {
running++;
}
Expand All @@ -62,7 +62,7 @@ public int getRunningCount() {
}

public int getStoppedCount() {
return asyncTaskManagerServiceImpl.getAllHandles().size()
return asyncTaskHandleManager.getAllHandles().size()
- getRunningCount();
}

Expand All @@ -71,7 +71,7 @@ public Date getDateFromLong(long value) {
}

public void cancel(AsyncTaskHandle handle) {
handle.cancel();
handle.cancel(true);
}

}
Expand Up @@ -38,7 +38,7 @@
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.async.tasks.CopyVersionTask;
import org.zanata.async.handle.CopyVersionTaskHandle;
import org.zanata.common.EntityStatus;
import org.zanata.dao.LocaleMemberDAO;
import org.zanata.dao.ProjectDAO;
Expand All @@ -47,7 +47,6 @@
import org.zanata.model.Activity;
import org.zanata.model.HAccount;
import org.zanata.model.HLocale;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.seam.scope.ConversationScopeMessages;
import org.zanata.security.ZanataIdentity;
Expand Down Expand Up @@ -162,7 +161,7 @@ public boolean isVersionCopying(String projectSlug, String versionSlug) {

public String
getCopiedDocumentCount(String projectSlug, String versionSlug) {
CopyVersionTask.CopyVersionTaskHandle handler =
CopyVersionTaskHandle handler =
copyVersionManager.getCopyVersionProcessHandle(projectSlug,
versionSlug);

Expand All @@ -181,7 +180,7 @@ public void cancelCopyVersion(String projectSlug, String versionSlug) {

public String getCopyVersionCompletePercent(String projectSlug,
String versionSlug) {
CopyVersionTask.CopyVersionTaskHandle handler =
CopyVersionTaskHandle handler =
copyVersionManager.getCopyVersionProcessHandle(projectSlug,
versionSlug);

Expand All @@ -202,7 +201,7 @@ public String getCopyVersionCompletePercent(String projectSlug,

public String getCopyVersionTotalDocuments(String projectSlug,
String versionSlug) {
CopyVersionTask.CopyVersionTaskHandle handler =
CopyVersionTaskHandle handler =
copyVersionManager.getCopyVersionProcessHandle(projectSlug,
versionSlug);

Expand Down

0 comments on commit 73e7e2c

Please sign in to comment.