Piotr Kliczewski has uploaded a new change for review.

Change subject: engine : same exception is logged multiple times in engine log
......................................................................

engine : same exception is logged multiple times in engine log

Proposed solution is according to Yair guidelines from the bug.

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=982686
Change-Id: Icbc476f1f5799967e5776ede3dcfd462eada2ce9
Signed-off-by: pkliczewski <piotr.kliczew...@gmail.com>
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VDSCommandBase.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ProxyReturnValueException.java
A 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/ProxyReturnValuesTestCase.java
4 files changed, 102 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/21159/1

diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VDSCommandBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VDSCommandBase.java
index afffcbe..60fbd11 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VDSCommandBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VDSCommandBase.java
@@ -5,6 +5,7 @@
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.dal.VdcCommandBase;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.ProxyReturnValueException;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSExceptionBase;
 
 public abstract class VDSCommandBase<P extends VDSParametersBase> extends 
VdcCommandBase {
@@ -54,8 +55,11 @@
             _returnValue = new VDSReturnValue();
             getVDSReturnValue().setSucceeded(true);
             executeVDSCommand();
+        } catch (ProxyReturnValueException e) {
+            setVdsRuntimeError(e);
         } catch (RuntimeException ex) {
             setVdsRuntimeError(ex);
+            logException(ex);
         }
     }
 
@@ -74,8 +78,6 @@
                 getVDSReturnValue().setVdsError(((VDSExceptionBase) 
vdsExp.getCause()).getVdsError());
             }
         }
-
-        logException(ex);
     }
 
     private void logException(RuntimeException ex) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
index e35b645..67eaa3c 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
@@ -190,7 +190,7 @@
         tempVar.setCode(returnStatus);
         tempVar.setMessage(getReturnStatus().mMessage);
         outEx.setVdsError(tempVar);
-        throw outEx;
+        throw new ProxyReturnValueException(outEx);
     }
 
     private VDSExceptionBase createException() {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ProxyReturnValueException.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ProxyReturnValueException.java
new file mode 100644
index 0000000..16fe947
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ProxyReturnValueException.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.vdsbroker.vdsbroker;
+
+import java.io.Serializable;
+
+public class ProxyReturnValueException extends RuntimeException implements 
Serializable{
+
+    private static final long serialVersionUID = 5538974336825846508L;
+
+    public ProxyReturnValueException() {
+        super();
+    }
+
+    public ProxyReturnValueException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public ProxyReturnValueException(String message) {
+        super(message);
+    }
+
+    public ProxyReturnValueException(Throwable cause) {
+        super(cause);
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/ProxyReturnValuesTestCase.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/ProxyReturnValuesTestCase.java
new file mode 100644
index 0000000..90ffa92
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/ProxyReturnValuesTestCase.java
@@ -0,0 +1,73 @@
+package org.ovirt.engine.core.vdsbroker;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyVararg;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.springframework.util.ReflectionUtils.findField;
+import static org.springframework.util.ReflectionUtils.makeAccessible;
+import static org.springframework.util.ReflectionUtils.setField;
+
+import java.lang.reflect.Field;
+
+import org.junit.Test;
+import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
+import org.ovirt.engine.core.utils.log.Log;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.ProxyReturnValueException;
+
+public class ProxyReturnValuesTestCase {
+
+
+    @Test
+    public void testNumberOfLogInvocations() {
+        // given
+        VDSCommandBase<?> base = spy(new 
TestCommandBase(mock(VDSParametersBase.class)));
+        Log log = mock(Log.class);
+        mockLogging(base, log);
+        
doThrow(ProxyReturnValueException.class).when(base).executeVDSCommand();
+
+        // when
+        base.executeCommand();
+
+        // then
+        verify(log, never()).errorFormat(any(String.class), anyVararg());
+    }
+
+    @Test
+    public void testOtherExceptions() {
+        // given
+        VDSCommandBase<?> base = spy(new 
TestCommandBase(mock(VDSParametersBase.class)));
+        Log log = mock(Log.class);
+        mockLogging(base, log);
+        doThrow(RuntimeException.class).when(base).executeVDSCommand();
+
+        // when
+        base.executeCommand();
+
+        // then
+        verify(log, times(1)).errorFormat(any(String.class), anyVararg());
+    }
+
+    private void mockLogging(VDSCommandBase<?> base, Log log) {
+        Field field = findField(VDSCommandBase.class, "log");
+        makeAccessible(field);
+        setField(field, base, log);
+    }
+
+    @SuppressWarnings("rawtypes")
+    class TestCommandBase extends VDSCommandBase {
+
+        @SuppressWarnings("unchecked")
+        public TestCommandBase(VDSParametersBase parameters) {
+            super(parameters);
+        }
+
+        @Override
+        protected void executeVDSCommand() {
+        }
+    }
+}


-- 
To view, visit http://gerrit.ovirt.org/21159
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icbc476f1f5799967e5776ede3dcfd462eada2ce9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Piotr Kliczewski <piotr.kliczew...@gmail.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to