Yevgeny Zaspitsky has uploaded a new change for review. Change subject: core: Enable running canDoAction in the same trx with execute ......................................................................
core: Enable running canDoAction in the same trx with execute @CanDoActionSupportsTransaction annotation added in order to avoid suspending current transaction for executing canDoAction. That allows sharing a single transaction between multiple commands executions. Change-Id: I41034c27b993ee0cc179f500ed8cf32552f23c81 Signed-off-by: Yevgeny Zaspitsky <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CanDoActionSupportsTransaction.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java 2 files changed, 23 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/27/37227/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CanDoActionSupportsTransaction.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CanDoActionSupportsTransaction.java new file mode 100644 index 0000000..b19f3ea --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CanDoActionSupportsTransaction.java @@ -0,0 +1,11 @@ +package org.ovirt.engine.core.bll; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface CanDoActionSupportsTransaction { +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java index 6594f68..c811174 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java @@ -740,10 +740,18 @@ rollbackQuota(); } + private boolean isCanDoActionSupportsTransaction() { + CanDoActionSupportsTransaction annotation = getClass().getAnnotation(CanDoActionSupportsTransaction.class); + return annotation != null; + } + private boolean internalCanDoAction() { boolean returnValue = false; try { - Transaction transaction = TransactionSupport.suspend(); + Transaction transaction = null; + if (!isCanDoActionSupportsTransaction()) { + transaction = TransactionSupport.suspend(); + } try { returnValue = isUserAuthorizedToRunAction() && isBackwardsCompatible() && validateInputs() && acquireLock() @@ -754,7 +762,9 @@ StringUtils.join(getReturnValue().getCanDoActionMessages(), ',')); } } finally { - TransactionSupport.resume(transaction); + if (transaction != null) { + TransactionSupport.resume(transaction); + } } } catch (DataAccessException dataAccessEx) { log.error("Data access error during CanDoActionFailure.", dataAccessEx); -- To view, visit http://gerrit.ovirt.org/37227 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I41034c27b993ee0cc179f500ed8cf32552f23c81 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yevgeny Zaspitsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
