Kanagaraj M has uploaded a new change for review. Change subject: engine: RunMultipleAction - supporting Run Only If All CanDo Pass ......................................................................
engine: RunMultipleAction - supporting Run Only If All CanDo Pass A new boolean parameter is added to MultipleActionsRunner to support run the actions only if CanDo of all commands are passed. The new field isRunOnlyIfAllCanDoPass will be false by default so the RunMultipleAction behaves as it was previously. Change-Id: If8f249484a451be44d3286c865806c5f8364f74a Signed-off-by: Kanagaraj M <kmayi...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java M frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java 8 files changed, 57 insertions(+), 19 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/7287/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java index a167cc2..9d618f9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java @@ -410,20 +410,21 @@ @Override public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, - ArrayList<VdcActionParametersBase> parameters) { - return runMultipleActionsImpl(actionType, parameters, false); + ArrayList<VdcActionParametersBase> parameters, boolean isRunOnlyIfAllCanDoPass) { + return runMultipleActionsImpl(actionType, parameters, false, isRunOnlyIfAllCanDoPass); } @Override @ExcludeClassInterceptors public ArrayList<VdcReturnValueBase> runInternalMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters) { - return runMultipleActionsImpl(actionType, parameters, true); + return runMultipleActionsImpl(actionType, parameters, true, false); } public ArrayList<VdcReturnValueBase> runMultipleActionsImpl(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, boolean isInternal, + boolean isRunOnlyIfAllCanDoPass, ExecutionContext executionContext) { String sessionId = ThreadLocalParamsContainer.getHttpSessionId(); if (!StringUtils.isEmpty(sessionId)) { @@ -436,6 +437,7 @@ MultipleActionsRunner runner = MultipleActionsRunnersFactory.CreateMultipleActionsRunner(actionType, parameters, isInternal); runner.setExecutionContext(executionContext); + runner.setIsRunOnlyIfAllCanDoPass(isRunOnlyIfAllCanDoPass); return runner.Execute(); } @@ -444,13 +446,14 @@ public ArrayList<VdcReturnValueBase> runInternalMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, ExecutionContext executionContext) { - return runMultipleActionsImpl(actionType, parameters, true, executionContext); + return runMultipleActionsImpl(actionType, parameters, true, false, executionContext); } private ArrayList<VdcReturnValueBase> runMultipleActionsImpl(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, - boolean isInternal) { - return runMultipleActionsImpl(actionType, parameters, isInternal, null); + boolean isInternal, + boolean isRunOnlyIfAllCanDoPass) { + return runMultipleActionsImpl(actionType, parameters, isInternal, isRunOnlyIfAllCanDoPass, null); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java index 840a70a..7c9eb02 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunner.java @@ -31,6 +31,11 @@ protected boolean isInternal; /** + * Execute the actions only if CanDo of all the requests returns true + */ + protected boolean isRunOnlyIfAllCanDoPass = false; + + /** * The context by which each command should be executed (monitored or non-monitored). */ private ExecutionContext executionContext; @@ -78,12 +83,27 @@ } else { CheckCanDoActionsAsyncroniousely(returnValues); } - ThreadPoolUtil.execute(new Runnable() { - @Override - public void run() { - RunCommands(); + + boolean canRunActions = true; + if (isRunOnlyIfAllCanDoPass) + { + for (VdcReturnValueBase value : returnValues) { + if (!value.getCanDoAction()) { + canRunActions = false; + break; + } } - }); + } + + if (canRunActions) + { + ThreadPoolUtil.execute(new Runnable() { + @Override + public void run() { + RunCommands(); + } + }); + } } catch (RuntimeException e) { log.error("Failed to execute multiple actions of type: " + _actionType, e); } @@ -187,4 +207,8 @@ this.executionContext = executionContext; } + public void setIsRunOnlyIfAllCanDoPass(boolean isRunOnlyIfAllCanDoPass) { + this.isRunOnlyIfAllCanDoPass = isRunOnlyIfAllCanDoPass; + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java index c9a4733..843a39c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainsMultipleActionRunner.java @@ -41,7 +41,7 @@ parameters); } else { return Backend.getInstance().RunMultipleActions(VdcActionType.AddStoragePoolWithStorages, - parameters); + parameters, false); } } else { return super.Execute(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java index 8c32983..4a69b0f 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/BackendLocal.java @@ -23,7 +23,8 @@ ErrorTranslator getVdsErrorsTranslator(); java.util.ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, - java.util.ArrayList<VdcActionParametersBase> parameters); + java.util.ArrayList<VdcActionParametersBase> parameters, + boolean isRunOnlyIfAllCanDoPass); void Initialize(); diff --git a/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java b/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java index 573cbee..ebbab22 100644 --- a/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java +++ b/frontend/api/genericapi/src/main/java/org/ovirt/engine/ui/genericapi/GenericApiService.java @@ -33,9 +33,9 @@ } public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, - ArrayList<VdcActionParametersBase> parameters) { + ArrayList<VdcActionParametersBase> parameters, boolean isRunOnlyIfAllCanDoPass) { java.util.ArrayList<VdcReturnValueBase> returnValue = backend.RunMultipleActions( - actionType, parameters); + actionType, parameters, isRunOnlyIfAllCanDoPass); return returnValue; } diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java index 67aa2e2..5724388 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java @@ -493,9 +493,17 @@ final ArrayList<VdcActionParametersBase> parameters, final IFrontendMultipleActionAsyncCallback callback, final Object state) { + RunMultipleAction(actionType, parameters, false, callback, state); + } + + public static void RunMultipleAction(final VdcActionType actionType, + final ArrayList<VdcActionParametersBase> parameters, + boolean isRunOnlyIfAllCanDoPass, + final IFrontendMultipleActionAsyncCallback callback, + final Object state) { GenericApiGWTServiceAsync service = GenericApiGWTServiceAsync.Util.getInstance(); - service.RunMultipleActions(actionType, parameters, new AsyncCallback<ArrayList<VdcReturnValueBase>>() { + service.RunMultipleActions(actionType, parameters, isRunOnlyIfAllCanDoPass, new AsyncCallback<ArrayList<VdcReturnValueBase>>() { @Override public void onFailure(Throwable caught) { logger.log(Level.SEVERE, "Failed to execute RunAction: " + caught, caught); //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java index 8b988b8..8c84cbc 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java @@ -29,7 +29,8 @@ public ArrayList<VdcReturnValueBase> RunMultipleActions( VdcActionType actionType, - ArrayList<VdcActionParametersBase> multipleParams); + ArrayList<VdcActionParametersBase> multipleParams, + boolean isRunOnlyIfAllCanDoPass); public VdcUser getLoggedInUser(); diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java index 6beec91..50ce6eb 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java @@ -92,14 +92,15 @@ @Override public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, - ArrayList<VdcActionParametersBase> multipleParams) { + ArrayList<VdcActionParametersBase> multipleParams, boolean isRunOnlyIfAllCanDoPass) { log.debug("Server: RunMultipleAction invoked! [amount of actions: " + multipleParams.size() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ for (VdcActionParametersBase params : multipleParams) { params.setSessionId(getSessionId()); } - ArrayList<VdcReturnValueBase> returnValues = getBackend().RunMultipleActions(actionType, multipleParams); + ArrayList<VdcReturnValueBase> returnValues = + getBackend().RunMultipleActions(actionType, multipleParams, isRunOnlyIfAllCanDoPass); return returnValues; } -- To view, visit http://gerrit.ovirt.org/7287 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If8f249484a451be44d3286c865806c5f8364f74a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Kanagaraj M <kmayi...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches