Alexander Wels has uploaded a new change for review. Change subject: engine, webadmin: synchronous multiple action ......................................................................
engine, webadmin: synchronous multiple action - Added a 'synchronous' version of run multiple actions to allow the frontend combine multiple single actions into one request and wait for the result of all of them. At the same time not disturb existing multiple actions that do NOT wait for the results. Change-Id: I935f4257e731de719540db9d79d5865537be228d Signed-off-by: Alexander Wels <aw...@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/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/communication/GWTRPCCommunicationProvider.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperation.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 M frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/FrontendActionTest.java M frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProviderTest.java 11 files changed, 182 insertions(+), 68 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/23032/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 675ba69..349bd2b 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 @@ -20,6 +20,7 @@ import org.apache.commons.collections.KeyValue; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; +import org.ovirt.engine.core.bll.attestationbroker.AttestThread; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.interceptors.ThreadLocalSessionCleanerInterceptor; import org.ovirt.engine.core.bll.interfaces.BackendCommandObjectsHandler; @@ -74,7 +75,6 @@ import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.utils.osinfo.OsInfoPreferencesLoader; import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl; -import org.ovirt.engine.core.bll.attestationbroker.AttestThread; // Here we use a Singleton Bean // The @Startup annotation is to make sure the bean is initialized on startup. @@ -505,13 +505,19 @@ @Override public ArrayList<VdcReturnValueBase> runMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, boolean isRunOnlyIfAllCanDoPass) { + return runMultipleActions(actionType, parameters, isRunOnlyIfAllCanDoPass, false); + } + + @Override + public ArrayList<VdcReturnValueBase> runMultipleActions(VdcActionType actionType, + ArrayList<VdcActionParametersBase> parameters, boolean isRunOnlyIfAllCanDoPass, boolean waitForResult) { VdcReturnValueBase returnValue = notAllowToRunAction(actionType); if (returnValue != null) { ArrayList<VdcReturnValueBase> list = new ArrayList<VdcReturnValueBase>(); list.add(returnValue); return list; } else { - return runMultipleActionsImpl(actionType, parameters, false, isRunOnlyIfAllCanDoPass); + return runMultipleActionsImpl(actionType, parameters, false, isRunOnlyIfAllCanDoPass, waitForResult); } } @@ -519,13 +525,14 @@ @ExcludeClassInterceptors public ArrayList<VdcReturnValueBase> runInternalMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters) { - return runMultipleActionsImpl(actionType, parameters, true, false); + return runMultipleActionsImpl(actionType, parameters, true, false, false); } public ArrayList<VdcReturnValueBase> runMultipleActionsImpl(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, boolean isInternal, boolean isRunOnlyIfAllCanDoPass, + boolean isWaitForResult, ExecutionContext executionContext) { String sessionId = ThreadLocalParamsContainer.getHttpSessionId(); if (!StringUtils.isEmpty(sessionId)) { @@ -539,6 +546,7 @@ parameters, isInternal); runner.setExecutionContext(executionContext); runner.setIsRunOnlyIfAllCanDoPass(isRunOnlyIfAllCanDoPass); + runner.setIsWaitForResult(isWaitForResult); return runner.execute(); } @@ -547,14 +555,16 @@ public ArrayList<VdcReturnValueBase> runInternalMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, ExecutionContext executionContext) { - return runMultipleActionsImpl(actionType, parameters, true, false, executionContext); + return runMultipleActionsImpl(actionType, parameters, true, false, false, executionContext); } private ArrayList<VdcReturnValueBase> runMultipleActionsImpl(VdcActionType actionType, ArrayList<VdcActionParametersBase> parameters, boolean isInternal, - boolean isRunOnlyIfAllCanDoPass) { - return runMultipleActionsImpl(actionType, parameters, isInternal, isRunOnlyIfAllCanDoPass, null); + boolean isRunOnlyIfAllCanDoPass, + boolean isWaitForResult) { + return runMultipleActionsImpl(actionType, parameters, isInternal, isRunOnlyIfAllCanDoPass, isWaitForResult, + 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 8ef942a..10e8413 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 @@ -20,9 +20,10 @@ private final static int CONCURRENT_ACTIONS = 10; private VdcActionType actionType = VdcActionType.Unknown; - private List<VdcActionParametersBase> parameters; + private final List<VdcActionParametersBase> parameters; private final ArrayList<CommandBase<?>> commands = new ArrayList<CommandBase<?>>(); protected boolean isInternal; + private boolean isWaitForResult = false; /** * Execute the actions only if CanDo of all the requests returns true @@ -88,7 +89,11 @@ } if (canRunActions) { - invokeCommands(); + if (isWaitForResult) { + invokeSyncCommands(returnValues); + } else { + invokeCommands(); + } } } catch (RuntimeException e) { log.error("Failed to execute multiple actions of type: " + actionType, e); @@ -162,6 +167,26 @@ }); } + protected void invokeSyncCommands(ArrayList<VdcReturnValueBase> returnValues) { + List<Callable<VdcReturnValueBase>> actionTasks = new ArrayList<Callable<VdcReturnValueBase>>(); + for (CommandBase<?> command : getCommands()) { + if (command.getReturnValue().getCanDoAction()) { + actionTasks.add(buildActionSync(command)); + } + } + returnValues.addAll(ThreadPoolUtil.invokeAll(actionTasks)); + } + + protected Callable<VdcReturnValueBase> buildActionSync(final CommandBase<?> command) { + return new Callable<VdcReturnValueBase>() { + + @Override + public VdcReturnValueBase call() { + return executeValidatedSyncCommand(command); + } + }; + } + /** * Executes commands which passed validation and creates monitoring objects. * @@ -179,6 +204,17 @@ command.executeAction(); } + protected VdcReturnValueBase executeValidatedSyncCommand(CommandBase<?> command) { + if (executionContext == null || executionContext.isMonitored()) { + ExecutionHandler.prepareCommandForMonitoring(command, + command.getActionType(), + command.isInternalExecution()); + } + ThreadLocalParamsContainer.setCorrelationId(command.getCorrelationId()); + command.insertAsyncTaskPlaceHolders(); + return command.executeAction(); + } + public void setExecutionContext(ExecutionContext executionContext) { this.executionContext = executionContext; } @@ -187,4 +223,7 @@ this.isRunOnlyIfAllCanDoPass = isRunOnlyIfAllCanDoPass; } + public void setIsWaitForResult(boolean waitForResult) { + this.isWaitForResult = waitForResult; + } } 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 37eeee1..a6d6a0b 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 @@ -10,8 +10,8 @@ import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; -import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; 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 65f3e1c..7d597a2 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 @@ -24,6 +24,10 @@ java.util.ArrayList<VdcReturnValueBase> runMultipleActions(VdcActionType actionType, java.util.ArrayList<VdcActionParametersBase> parameters, + boolean isRunOnlyIfAllCanDoPass, boolean waitForResult); + + java.util.ArrayList<VdcReturnValueBase> runMultipleActions(VdcActionType actionType, + java.util.ArrayList<VdcActionParametersBase> parameters, boolean isRunOnlyIfAllCanDoPass); void initialize(); 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 aff764e..64d82da 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 @@ -251,7 +251,7 @@ initQueryParamsFilter(parameters); final VdcOperation<VdcQueryType, VdcQueryParametersBase> operation = - new VdcOperation<VdcQueryType, VdcQueryParametersBase>(queryType, parameters, isPublic, + new VdcOperation<VdcQueryType, VdcQueryParametersBase>(queryType, parameters, isPublic, false, new VdcOperationCallback<VdcOperation<VdcQueryType, VdcQueryParametersBase>, VdcQueryReturnValue>() { @Override public void onSuccess(final VdcOperation<VdcQueryType, VdcQueryParametersBase> operation, @@ -384,7 +384,7 @@ parameters.setRefresh(false); // Why do we do this? initQueryParamsFilter(parameters); operationList.add(new VdcOperation<VdcQueryType, VdcQueryParametersBase>(queryTypeList.get(i), - parameters, multiCallback)); + parameters, true, multiCallback)); } raiseQueryStartedEvent(queryTypeList, context); @@ -564,7 +564,7 @@ List<VdcOperation<?, ?>> operationList = new ArrayList<VdcOperation<?, ?>>(); for (VdcActionParametersBase parameter: parameters) { VdcOperation<VdcActionType, VdcActionParametersBase> operation = new VdcOperation<VdcActionType, - VdcActionParametersBase>(actionType, parameter, multiCallback); + VdcActionParametersBase>(actionType, parameter, true, multiCallback); operationList.add(operation); } if (operationList.isEmpty()) { diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java index c02372a..fb800c6 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java @@ -228,47 +228,71 @@ if (parameters.size() > 1 || (allActionOperations.size() == 1 && allActionOperations.get(0).getCallback() instanceof VdcOperationCallbackList)) { - getService().RunMultipleActions(actionEntry.getKey(), (ArrayList<VdcActionParametersBase>) parameters, false, - new AsyncCallback<ArrayList<VdcReturnValueBase>>() { - - @Override - public void onFailure(final Throwable exception) { - Map<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackMap = - getCallbackMap(actionEntry.getValue()); - for (Map.Entry<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackEntry: callbackMap.entrySet()) { - if (callbackEntry.getKey() instanceof VdcOperationCallbackList) { - ((VdcOperationCallbackList) callbackEntry.getKey()).onFailure(callbackEntry.getValue(), exception); - } else { - ((VdcOperationCallback) callbackEntry.getKey()).onFailure(callbackEntry.getValue().get(0), - exception); - } - } - } - - @Override - public void onSuccess(final ArrayList<VdcReturnValueBase> result) { - Map<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackMap = - getCallbackMap(actionEntry.getValue()); - for (Map.Entry<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackEntry: callbackMap.entrySet()) { - List<VdcReturnValueBase> actionResult = (List<VdcReturnValueBase>) - getOperationResult(callbackEntry.getValue(), allActionOperations, result); - if (callbackEntry.getKey() instanceof VdcOperationCallbackList) { - ((VdcOperationCallbackList) callbackEntry.getKey()).onSuccess(callbackEntry.getValue(), - actionResult); - } else { - ((VdcOperationCallback) callbackEntry.getKey()).onSuccess(callbackEntry.getValue().get(0), - actionResult.get(0)); - } - } - } - - }); + List<VdcOperation<?, ?>> waitForResultList = getWaitForResultList(actionEntry.getValue()); + if (!waitForResultList.isEmpty()) { + runMultipleActions(actionEntry.getKey(), waitForResultList, parameters, allActionOperations, + true); + } + if (waitForResultList.size() != actionEntry.getValue().size()) { + List<VdcOperation<?, ?>> immediateReturnList = actionEntry.getValue(); + immediateReturnList.removeAll(waitForResultList); //Don't care if it succeeds or not. + runMultipleActions(actionEntry.getKey(), immediateReturnList, parameters, allActionOperations, + false); + } } else if (actionEntry.getValue().size() == 1) { transmitOperation(actionEntry.getValue().get(0)); } } } + private List<VdcOperation<?, ?>> getWaitForResultList(List<VdcOperation<?, ?>> originalList) { + List<VdcOperation<?, ?>> result = new ArrayList<VdcOperation<?, ?>>(); + for (VdcOperation<?, ?> operation: originalList) { + if (!operation.isFromList()) { + result.add(operation); + } + } + return result; + } + + private void runMultipleActions(final VdcActionType actionType, final List<VdcOperation<?, ?>> operations, + List<VdcActionParametersBase> parameters, final List<VdcOperation<?, ?>> allActionOperations, + final boolean waitForResults) { + getService().RunMultipleActions(actionType, (ArrayList<VdcActionParametersBase>) parameters, + false, waitForResults, new AsyncCallback<ArrayList<VdcReturnValueBase>>() { + + @Override + public void onFailure(final Throwable exception) { + Map<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackMap = + getCallbackMap(operations); + for (Map.Entry<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackEntry: callbackMap.entrySet()) { + if (callbackEntry.getKey() instanceof VdcOperationCallbackList) { + ((VdcOperationCallbackList) callbackEntry.getKey()).onFailure(callbackEntry.getValue(), exception); + } else { + ((VdcOperationCallback) callbackEntry.getKey()).onFailure(callbackEntry.getValue().get(0), + exception); + } + } + } + + @Override + public void onSuccess(final ArrayList<VdcReturnValueBase> result) { + Map<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackMap = + getCallbackMap(operations); + for (Map.Entry<VdcOperationCallback<?, ?>, List<VdcOperation<?, ?>>> callbackEntry: callbackMap.entrySet()) { + List<VdcReturnValueBase> actionResult = (List<VdcReturnValueBase>) + getOperationResult(callbackEntry.getValue(), allActionOperations, result); + if (callbackEntry.getKey() instanceof VdcOperationCallbackList) { + ((VdcOperationCallbackList) callbackEntry.getKey()).onSuccess(callbackEntry.getValue(), + actionResult); + } else { + ((VdcOperationCallback) callbackEntry.getKey()).onSuccess(callbackEntry.getValue().get(0), + actionResult.get(0)); + } + } + } + }); + } /** * Map operations by callback, so we can properly call a single callback for all related operations. * @param operationList The list of operations to determine the map for. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperation.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperation.java index fe17dd1..10af440 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperation.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperation.java @@ -41,21 +41,28 @@ private final boolean isAction; /** + * If {@code true}, this operation was part of a list of operations before being split into a single operation. + */ + private final boolean isFromList; + + /** * Private constructor that initializes the final members. * @param operation The operation. * @param param The parameter for the operation. * @param callback The callback to call when the operation is finished. * @param sourceOperation If we cloned an operation this is the source it came from. * @param isPublicOperation Determines if this operation should be public or not. + * @param fromList Shows if the operation came from a list of operations, before being split. */ private VdcOperation(final T operation, final P param, final VdcOperationCallback<?, ?> callback, - final VdcOperation<T, P> sourceOperation, final boolean isPublicOperation) { + final VdcOperation<T, P> sourceOperation, final boolean isPublicOperation, final boolean fromList) { if (operation instanceof VdcActionType) { this.isAction = true; } else if (operation instanceof VdcQueryType) { this.isAction = false; } else { - throw new IllegalArgumentException("Operation type must be either VdcActionType or VdcQueryType"); //$NON-NLS-1$ + throw new IllegalArgumentException( + "Operation type must be either VdcActionType or VdcQueryType"); //$NON-NLS-1$ } this.operationType = operation; @@ -63,6 +70,7 @@ this.operationCallback = callback; this.source = sourceOperation; this.isPublic = isPublicOperation; + this.isFromList = fromList; } /** @@ -72,7 +80,7 @@ */ public VdcOperation(final VdcOperation<T, P> sourceOperation, final VdcOperationCallback<?, ?> callback) { this(sourceOperation.getOperation(), sourceOperation.getParameter(), callback, sourceOperation, - sourceOperation.isPublic()); + sourceOperation.isPublic(), sourceOperation.isFromList); } /** @@ -82,7 +90,19 @@ * @param callback The callback to call when the operation is finished. */ public VdcOperation(final T operation, final P operationParameter, final VdcOperationCallback<?, ?> callback) { - this(operation, operationParameter, callback, null, false); + this(operation, operationParameter, callback, null, false, false); + } + + /** + * Constructor. + * @param operation The operation to set. + * @param operationParameter The parameter for the operation. + * @param fromList Is the operation originally from a list. + * @param callback The callback to call when the operation is finished. + */ + public VdcOperation(final T operation, final P operationParameter, final boolean fromList, + final VdcOperationCallback<?, ?> callback) { + this(operation, operationParameter, callback, null, false, fromList); } /** @@ -93,8 +113,8 @@ * @param callback The callback to call when the operation is finished. */ public VdcOperation(final T operation, final P operationParameter, final boolean isPublicOperation, - final VdcOperationCallback<?, ?> callback) { - this(operation, operationParameter, callback, null, isPublicOperation); + final boolean fromList, final VdcOperationCallback<?, ?> callback) { + this(operation, operationParameter, callback, null, isPublicOperation, fromList); } /** @@ -195,4 +215,8 @@ return result; } + public boolean isFromList() { + return isFromList; + } + } 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 2502a5b..c55289e 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 @@ -34,6 +34,11 @@ ArrayList<VdcActionParametersBase> multipleParams, boolean isRunOnlyIfAllCanDoPass); + public ArrayList<VdcReturnValueBase> RunMultipleActions( + VdcActionType actionType, + ArrayList<VdcActionParametersBase> multipleParams, + boolean isRunOnlyIfAllCanDoPass, boolean isWaitForResult); + public DbUser getLoggedInUser(); public VdcReturnValueBase logOff(DbUser userToLogoff); 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 29f4e0f..8753e8a 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 @@ -103,6 +103,12 @@ @Override public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> multipleParams, boolean isRunOnlyIfAllCanDoPass) { + return RunMultipleActions(actionType, multipleParams, isRunOnlyIfAllCanDoPass, false); + } + + @Override + public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, + ArrayList<VdcActionParametersBase> multipleParams, boolean isRunOnlyIfAllCanDoPass, boolean isWaitForResult) { log.debug("Server: RunMultipleAction invoked! [amount of actions: " + multipleParams.size() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ for (VdcActionParametersBase params : multipleParams) { @@ -110,7 +116,7 @@ } ArrayList<VdcReturnValueBase> returnValues = - getBackend().runMultipleActions(actionType, multipleParams, isRunOnlyIfAllCanDoPass); + getBackend().runMultipleActions(actionType, multipleParams, isRunOnlyIfAllCanDoPass, isWaitForResult); return returnValues; } diff --git a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/FrontendActionTest.java b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/FrontendActionTest.java index be40ba8..5ca3af4 100644 --- a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/FrontendActionTest.java +++ b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/FrontendActionTest.java @@ -128,7 +128,7 @@ frontend.runMultipleAction(VdcActionType.AddLocalStorageDomain, parameters, false, mockMultipleActionCallback, null); verify(mockService).RunMultipleActions(eq(VdcActionType.AddLocalStorageDomain), eq(parameters), eq(false), - callbackMultipleActions.capture()); + eq(false), callbackMultipleActions.capture()); StatusCodeException exception = new StatusCodeException(0, "0 status code"); //$NON-NLS-1$ callbackMultipleActions.getValue().onFailure(exception); verify(mockFrontendFailureEvent, never()).raise(eq(Frontend.class), (FrontendFailureEventArgs) any()); @@ -152,7 +152,7 @@ frontend.runMultipleAction(VdcActionType.AddLocalStorageDomain, parameters, false, mockMultipleActionCallback, testState); verify(mockService).RunMultipleActions(eq(VdcActionType.AddLocalStorageDomain), eq(parameters), eq(false), - callbackMultipleActions.capture()); + eq(false), callbackMultipleActions.capture()); StatusCodeException exception = new StatusCodeException(HttpServletResponse.SC_NOT_FOUND, "404 status code"); //$NON-NLS-1$ callbackMultipleActions.getValue().onFailure(exception); @@ -186,7 +186,7 @@ frontend.runMultipleAction(VdcActionType.AddLocalStorageDomain, parameters, false, mockMultipleActionCallback, testState); verify(mockService).RunMultipleActions(eq(VdcActionType.AddLocalStorageDomain), eq(parameters), eq(false), - callbackMultipleActions.capture()); + eq(false), callbackMultipleActions.capture()); ArrayList<VdcReturnValueBase> returnValues = new ArrayList<VdcReturnValueBase>(); returnValues.add(new VdcReturnValueBase()); returnValues.add(new VdcReturnValueBase()); @@ -223,7 +223,7 @@ frontend.runMultipleAction(VdcActionType.AddLocalStorageDomain, parameters, false, mockMultipleActionCallback, testState); verify(mockService).RunMultipleActions(eq(VdcActionType.AddLocalStorageDomain), eq(parameters), eq(false), - callbackMultipleActions.capture()); + eq(false), callbackMultipleActions.capture()); ArrayList<VdcReturnValueBase> returnValues = new ArrayList<VdcReturnValueBase>(); returnValues.add(new VdcReturnValueBase()); returnValues.add(new VdcReturnValueBase()); @@ -270,7 +270,7 @@ frontend.runMultipleAction(VdcActionType.AddLocalStorageDomain, parameters, false, mockMultipleActionCallback, testState); verify(mockService).RunMultipleActions(eq(VdcActionType.AddLocalStorageDomain), eq(parameters), eq(false), - callbackMultipleActions.capture()); + eq(false), callbackMultipleActions.capture()); ArrayList<VdcReturnValueBase> returnValues = new ArrayList<VdcReturnValueBase>(); returnValues.add(new VdcReturnValueBase()); returnValues.add(new VdcReturnValueBase()); diff --git a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProviderTest.java b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProviderTest.java index cbee65c..a8283c2 100644 --- a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProviderTest.java +++ b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProviderTest.java @@ -264,7 +264,8 @@ testList.add(testOperation2); testProvider.transmitOperationList(testList); verify(mockService).RunMultipleActions(eq(VdcActionType.ActivateVds), - (ArrayList<VdcActionParametersBase>) eq(testParameterList), eq(false), actionCallbackList.capture()); + (ArrayList<VdcActionParametersBase>) eq(testParameterList), eq(false), eq(true), + actionCallbackList.capture()); actionCallbackList.getValue().onSuccess((ArrayList<VdcReturnValueBase>) testResultList); verify(mockOperationCallbackList1).onSuccess(eq(testList), eq(testResultList)); } @@ -284,7 +285,8 @@ testList.add(testOperation2); testProvider.transmitOperationList(testList); verify(mockService).RunMultipleActions(eq(VdcActionType.ActivateVds), - (ArrayList<VdcActionParametersBase>) eq(testParameterList), eq(false), actionCallbackList.capture()); + (ArrayList<VdcActionParametersBase>) eq(testParameterList), eq(false), eq(true), + actionCallbackList.capture()); Exception testException = new Exception("Failure"); //$NON-NLS-1$ actionCallbackList.getValue().onFailure(testException); verify(mockOperationCallbackList1).onFailure(eq(testList), eq(testException)); @@ -303,8 +305,8 @@ new VdcOperation<VdcActionType, VdcActionParametersBase>(VdcActionType.ActivateVds, testParameters, mockOperationCallbackList1); VdcOperation<VdcActionType, VdcActionParametersBase> testOperation3 = - new VdcOperation<VdcActionType, VdcActionParametersBase>(VdcActionType.ActivateStorageDomain, testParameters, - mockOperationCallbackSingle2); + new VdcOperation<VdcActionType, VdcActionParametersBase>(VdcActionType.ActivateStorageDomain, + testParameters, mockOperationCallbackSingle2); testList.add(testOperation1); testList.add(testOperation2); testList.add(testOperation3); @@ -315,7 +317,7 @@ List<VdcReturnValueBase> activateVdsResultList = createActionResultList(testResult, 2); testProvider.transmitOperationList(testList); verify(mockService).RunMultipleActions(eq(VdcActionType.ActivateVds), - (ArrayList<VdcActionParametersBase>) eq(activateVdsParameterList), eq(false), + (ArrayList<VdcActionParametersBase>) eq(activateVdsParameterList), eq(false), eq(true), actionCallbackList.capture()); verify(mockService).RunAction(eq(VdcActionType.ActivateStorageDomain), eq(testParameters), actionCallback.capture()); @@ -350,7 +352,7 @@ List<VdcReturnValueBase> activateVdsResultList = createActionResultList(testResult, 2); testProvider.transmitOperationList(testList); verify(mockService).RunMultipleActions(eq(VdcActionType.ActivateVds), - (ArrayList<VdcActionParametersBase>) eq(activateVdsParameterList), eq(false), + (ArrayList<VdcActionParametersBase>) eq(activateVdsParameterList), eq(false), eq(true), actionCallbackList.capture()); verify(mockService).RunAction(eq(VdcActionType.ActivateStorageDomain), eq(testParameters), actionCallback.capture()); @@ -478,7 +480,7 @@ VdcQueryParametersBase testQueryParameters = new VdcQueryParametersBase(); VdcOperation<VdcQueryType, VdcQueryParametersBase> testOperation1 = new VdcOperation<VdcQueryType, VdcQueryParametersBase>(VdcQueryType.Search, testQueryParameters, true, - mockOperationCallbackSingle1); + false, mockOperationCallbackSingle1); List<VdcOperation<?, ?>> operationList = new ArrayList<VdcOperation<?, ?>>(); operationList.add(testOperation1); testProvider.transmitOperationList(operationList); @@ -493,10 +495,10 @@ VdcQueryParametersBase testQueryParameters = new VdcQueryParametersBase(); VdcOperation<VdcQueryType, VdcQueryParametersBase> testOperation1 = new VdcOperation<VdcQueryType, VdcQueryParametersBase>(VdcQueryType.Search, testQueryParameters, true, - mockOperationCallbackSingle1); + false, mockOperationCallbackSingle1); VdcOperation<VdcQueryType, VdcQueryParametersBase> testOperation2 = new VdcOperation<VdcQueryType, VdcQueryParametersBase>(VdcQueryType.GetConfigurationValues, - testQueryParameters, true, mockOperationCallbackSingle2); + testQueryParameters, true, false, mockOperationCallbackSingle2); List<VdcOperation<?, ?>> operationList = new ArrayList<VdcOperation<?, ?>>(); operationList.add(testOperation1); operationList.add(testOperation2); -- To view, visit http://gerrit.ovirt.org/23032 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I935f4257e731de719540db9d79d5865537be228d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <aw...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches