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 testFailedBlocking() throws Exception { try (DRPC server = new DRPC(new StormMetricsRegistry(), null, 100)) { Future<String> found = exec.submit(() -> server.executeBlocking("testing", "test")); DRPCRequest request = getNextAvailableRequest(server, "testing"); assertNotNull(request); assertEquals("test", request.get_func_args()); assertNotNull(request.get_request_id()); server.failRequest(request.get_request_id(), null); try { found.get(100, TimeUnit.MILLISECONDS); fail("exec did not throw an exception"); } catch (ExecutionException e) { Throwable t = e.getCause(); assertTrue(t instanceof DRPCExecutionException); //Don't know a better way to validate that it failed. assertEquals(DRPCExceptionType.FAILED_REQUEST, ((DRPCExecutionException) t).get_type()); } } }
@Test public void testDequeueAfterTimeout() throws Exception { long timeout = 1000; try (DRPC server = new DRPC(new StormMetricsRegistry(), null, timeout)) { long start = Time.currentTimeMillis(); try { server.executeBlocking("testing", "test"); fail("Should have timed out...."); } catch (DRPCExecutionException e) { long spent = Time.currentTimeMillis() - start; assertTrue(spent < timeout * 2); assertTrue(spent >= timeout); assertEquals(DRPCExceptionType.SERVER_TIMEOUT, e.get_type()); } DRPCRequest request = server.fetchRequest("testing"); assertNotNull(request); assertEquals("", request.get_request_id()); assertEquals("", request.get_func_args()); } }