@Override public void onDriverStatusUpdated(QueryHandle handle, DriverQueryStatus status) { switch (status.getState()) { case SUCCESSFUL: onCompletion(handle); break; case FAILED: onError(handle, status.getErrorMessage()); break; case CANCELED: onError(handle, "Query cancelled"); break; default: break; } } }
@Override public void onDriverStatusUpdated(QueryHandle handle, DriverQueryStatus status) { switch (status.getState()) { case SUCCESSFUL: onCompletion(handle); break; case FAILED: onError(handle, status.getErrorMessage()); break; case CANCELED: onError(handle, "Query cancelled"); break; default: break; } } }
@Override public void run() { SessionState.setCurrentSessionState(state); for (int i = 0; i < 1000; i++) { try { thrDriver.updateStatus(qctx); if (qctx.getDriverStatus().isFinished()) { log.info("@@ " + handle.getHandleId() + " >> " + qctx.getDriverStatus().getState()); break; } Thread.sleep(POLL_DELAY); } catch (LensException e) { log.error("Got Exception " + e.getCause(), e); errCount.incrementAndGet(); break; } catch (InterruptedException e) { log.error("Encountred Interrupted exception", e); break; } } } });
/** * Wait for async query. * * @param ctx the ctx * @param driver the driver * @throws Exception the exception */ private void waitForAsyncQuery(QueryContext ctx, HiveDriver driver) throws Exception { while (true) { driver.updateStatus(ctx); System.out.println("#W Waiting for query " + ctx.getQueryHandle() + " status: " + ctx.getDriverStatus().getState()); assertNotNull(ctx.getDriverStatus()); if (ctx.getDriverStatus().isFinished()) { assertTrue(ctx.getDriverStatus().getDriverFinishTime() > 0); break; } System.out.println("Progress:" + ctx.getDriverStatus().getProgressMessage()); Thread.sleep(1000); assertTrue(ctx.getDriverStatus().getDriverStartTime() > 0); } }
/** * Test cancel query. * * @throws Exception the exception */ @Test(dataProvider = "waitBeforeCancel") public void testCancelQuery(boolean waitBeforeCancel) throws Exception { setupCancelQuery(); // picked function as positive with udf mapping to sleep - sothat the signature of both are same. // Here we need a UDF mapping because the function sleep is not available in Hive functions and semantic analysis // would fail otherwise. final String query = "SELECT positive(5) FROM cancel_query_test"; QueryContext context = createQueryContext(query); System.out.println("@@@ test_cancel:" + context.getQueryHandle()); executeAsync(context); QueryHandle handle = context.getQueryHandle(); // without wait query may not be launched. if (waitBeforeCancel) { Thread.sleep(1000); } boolean isCancelled = driver.cancelQuery(handle); driver.updateStatus(context); assertTrue(isCancelled); assertEquals(context.getDriverStatus().getState(), DriverQueryState.CANCELED); assertTrue(context.getDriverStatus().getDriverStartTime() > 0); assertTrue(context.getDriverStatus().getDriverFinishTime() > 0); driver.closeQuery(handle); }
if (StringUtils.isNotBlank(errorMsg)) { error = errorMsg; } else if (status.getState().equals(DriverQueryState.FAILED)) { error = status.getErrorMessage();
if (StringUtils.isNotBlank(errorMsg)) { error = errorMsg; } else if (status.getState().equals(DriverQueryState.FAILED)) { error = status.getErrorMessage();
/** * Test cancel async query. * * @throws Exception the exception */ @Test public void testCancelAsyncQuery() throws Exception { int handleSize = getHandleSize(); createTestTable("test_cancel_async"); queryConf.setBoolean(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, false); QueryContext context = createContext("select a.id aid, b.id bid from " + "((SELECT ID FROM test_cancel_async) a full outer join (select id from test_cancel_async) b)", queryConf); driver.executeAsync(context); driver.cancelQuery(context.getQueryHandle()); driver.updateStatus(context); assertEquals(context.getDriverStatus().getState(), DriverQueryState.CANCELED, "Expecting query to be cancelled"); driver.closeQuery(context.getQueryHandle()); assertHandleSize(handleSize); try { driver.cancelQuery(context.getQueryHandle()); fail("Cancel on closed query should throw error"); } catch (LensException exc) { assertTrue(exc.getMessage().startsWith("Query not found")); } }
System.out.println("Query: " + handle + " Status: " + context.getDriverStatus()); if (context.getDriverStatus().isFinished()) { assertEquals(context.getDriverStatus().getState(), DriverQueryState.SUCCESSFUL); assertEquals(context.getDriverStatus().getProgress(), 1.0); break;
Thread.sleep(500); assertEquals(ctx.getDriverStatus().getState(), DriverQueryState.FAILED); assertEquals(ctx.getDriverStatus().getProgress(), 1.0);
/** * Validate execute async. * * @param ctx the ctx * @param finalState the final state * @param isPersistent the is persistent * @param formatNulls the format nulls * @param driver the driver * @throws Exception the exception */ protected void validateExecuteAsync(QueryContext ctx, DriverQueryState finalState, boolean isPersistent, boolean formatNulls, HiveDriver driver) throws Exception { waitForAsyncQuery(ctx, driver); driver.updateStatus(ctx); assertEquals(ctx.getDriverStatus().getState(), finalState, "Expected query to finish with" + finalState); assertTrue(ctx.getDriverStatus().getDriverFinishTime() > 0); if (finalState.equals(DriverQueryState.SUCCESSFUL)) { System.out.println("Progress:" + ctx.getDriverStatus().getProgressMessage()); assertNotNull(ctx.getDriverStatus().getProgressMessage()); if (!isPersistent) { validateInMemoryResult(driver.fetchResultSet(ctx)); } else { validatePersistentResult(driver.fetchResultSet(ctx), TEST_DATA_FILE, ctx.getHDFSResultDir(), formatNulls); } } else if (finalState.equals(DriverQueryState.FAILED)) { System.out.println("Error:" + ctx.getDriverStatus().getErrorMessage()); System.out.println("Status:" + ctx.getDriverStatus().getStatusMessage()); assertNotNull(ctx.getDriverStatus().getErrorMessage()); } }