Repository: telstra/open-kilda
Issue: GRPC: any error leads to InternalServerError instead of showing actual error

**Step to reproduce:**
send a request with an invalid body to a grpc endpoint
for examle:
```
curl --location --request PUT '<address_grpc_speaker>/api/v1/noviflow/<ip_address_of_switch>/remotelogserver' \\
--header 'Accept: application/json;charset=UTF-8' \\
--header 'Content-Type: application/json' \\
--header 'Authorization: <credentials>' \\
--data-raw '{
    "ip_address": "1.1.1.1111",
    "port": 10514
}'
```

**Actual result:**
500 InternalServerError
```
{...
    "error-code": -1,
    "error-message": "Internal service error"
}{...
    "status": 500,
    "error": "Internal Server Error",
    "exception": "java.util.concurrent.CompletionException",
    "message": "org.openkilda.grpc.speaker.exception.GrpcRequestFailureException: Invalid hostname,please provide valid hostname.",
    "path": "/api/v1/noviflow/<ip_address_of_switch>/remotelogserver"
}
```

**Expected result:**
The system should return `400 Bad Request`.

Changed files:
src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/client/GrpcResponseObserver.java
src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/utils/GrpcExceptionHandler.java

diff --git a/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/client/GrpcResponseObserver.java b/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/client/GrpcResponseObserver.java
index 142980f87..baa3c9caa 100644
--- a/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/client/GrpcResponseObserver.java
+++ b/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/client/GrpcResponseObserver.java
@@ -66,8 +66,6 @@ public class GrpcResponseObserver<V> implements StreamObserver<V> {
 
     @Override
     public void onError(Throwable throwable) {
-        log.warn(String.format("Error occurred during sending of GRPC request %s on switch %s",
-                operation, switchAddress), throwable);
         future.completeExceptionally(throwable);
     }
 
diff --git a/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/utils/GrpcExceptionHandler.java b/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/utils/GrpcExceptionHandler.java
index fbc287ece..976105b18 100644
--- a/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/utils/GrpcExceptionHandler.java
+++ b/src-java/grpc-speaker/grpc-service/src/main/java/org/openkilda/grpc/speaker/utils/GrpcExceptionHandler.java
@@ -21,6 +21,7 @@ import org.openkilda.grpc.speaker.exception.GrpcRequestFailureException;
 import org.openkilda.messaging.error.ErrorType;
 import org.openkilda.messaging.error.GrpcMessageError;
 
+import io.grpc.StatusRuntimeException;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -29,15 +30,14 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.context.request.WebRequest;
 import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
 
-import java.net.SocketException;
-import java.util.concurrent.CompletionException;
-
 @ControllerAdvice
 public class GrpcExceptionHandler extends ResponseEntityExceptionHandler {
 
-    @ExceptionHandler(GrpcRequestFailureException.class)
-    protected ResponseEntity<Object> handleGrpcRequestExeption(GrpcRequestFailureException ex,
-                                                               WebRequest request) {
+    /**
+     * Exception handler.
+     */
+    @ExceptionHandler
+    public ResponseEntity<Object> handleException(GrpcRequestFailureException ex, WebRequest request) {
         HttpStatus status;
 
         switch (ex.getErrorType()) {
@@ -58,28 +58,12 @@ public class GrpcExceptionHandler extends ResponseEntityExceptionHandler {
         return makeExceptionalResponse(ex, makeErrorPayload(ex.getCode(), ex.getMessage()), status, request);
     }
 
-    @ExceptionHandler(CompletionException.class)
-    protected ResponseEntity<Object> handleCompletionExceptions(CompletionException wrapper, WebRequest request) {
-        ResponseEntity<Object> response;
-        try {
-            throw wrapper.getCause();
-        } catch (SocketException e) {
-            GrpcMessageError body = makeErrorPayload(-1, format("Communication failure - %s", e.getMessage()));
-            response = makeExceptionalResponse(e, body, HttpStatus.INTERNAL_SERVER_ERROR, request);
-        } catch (Exception e) {
-            GrpcMessageError body = makeErrorPayload(-1, ErrorType.INTERNAL_ERROR.toString());
-            response = makeExceptionalResponse(
-                    e, body, HttpStatus.INTERNAL_SERVER_ERROR, request);
-        } catch (Throwable e) {
-            GrpcMessageError body = makeErrorPayload(-1, ErrorType.INTERNAL_ERROR.toString());
-            response = new ResponseEntity<>(body, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        return response;
+    @ExceptionHandler
+    public ResponseEntity<Object> handleException(StatusRuntimeException ex, WebRequest request) {
+        GrpcMessageError body = makeErrorPayload(-1, format("Communication failure - %s", ex.getMessage()));
+        return makeExceptionalResponse(ex, body, HttpStatus.INTERNAL_SERVER_ERROR, request);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     protected ResponseEntity<Object> handleExceptionInternal(Exception exception, Object body, HttpHeaders headers,
                                                              HttpStatus status, WebRequest request) {
@@ -90,7 +74,7 @@ public class GrpcExceptionHandler extends ResponseEntityExceptionHandler {
 
     private ResponseEntity<Object> makeExceptionalResponse(
             Exception ex, GrpcMessageError body, HttpStatus status, WebRequest request) {
-        logger.error(format("Produce error response: %s", body), ex);
+        logger.error(format("Produce error response: %s", body));
         return super.handleExceptionInternal(ex, body, new HttpHeaders(), status, request);
     }