public java.lang.Object getFieldValue(_Fields field) { switch (field) { case MSG: return get_msg(); case TYPE: return get_type(); } throw new java.lang.IllegalStateException(); }
@Override public Response toResponse(DRPCExecutionException ex) { ResponseBuilder builder = Response.status(500); switch (ex.get_type()) { case FAILED_REQUEST: builder.status(400); break; case SERVER_SHUTDOWN: builder.status(503); //Not available break; case SERVER_TIMEOUT: builder.status(504); //proxy timeout break; case INTERNAL_ERROR: //fall throw on purpose default: //Empty (Still 500) break; } Map<String, String> body = new HashMap<>(); //TODO I would love to standardize this... body.put("error", ex.is_set_type() ? ex.get_type().toString() : "Internal Error"); body.put("errorMessage", ex.get_msg()); return builder.entity(JSONValue.toJSONString(body)).type("application/json").build(); }
@Test public void testFailedThrift() throws Exception { Map<String, Object> conf = getConf(0, 0, null); try (DRPCServer server = new DRPCServer(conf, new StormMetricsRegistry())) { server.start(); try (DRPCClient client = new DRPCClient(conf, "localhost", server.getDrpcPort()); DRPCInvocationsClient invoke = new DRPCInvocationsClient(conf, "localhost", server.getDrpcInvokePort())) { Future<String> found = exec.submit(() -> client.getClient().execute("testing", "test")); DRPCRequest request = getNextAvailableRequest(invoke, "testing"); assertNotNull(request); assertEquals("test", request.get_func_args()); assertNotNull(request.get_request_id()); invoke.failRequest(request.get_request_id()); try { found.get(1000, TimeUnit.MILLISECONDS); fail("exec did not throw an exception"); } catch (ExecutionException e) { Throwable t = e.getCause(); assertEquals(t.getClass(), DRPCExecutionException.class); //Don't know a better way to validate that it failed. assertEquals("Request failed", ((DRPCExecutionException)t).get_msg()); } } } }
public Object getFieldValue(_Fields field) { switch (field) { case MSG: return get_msg(); } throw new IllegalStateException(); }