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

Reply via email to