public void extractFailedAttempt(LensDriver selectedDriver) { failedAttempts.add(new FailedAttempt(selectedDriver.getFullyQualifiedName(), getDriverStatus().getProgress(), getDriverStatus().getProgressMessage(), getDriverStatus().getErrorMessage(), getDriverStatus().getDriverStartTime(), getDriverStatus().getDriverFinishTime())); getDriverStatus().clear(); }
public void extractFailedAttempt(LensDriver selectedDriver) { failedAttempts.add(new FailedAttempt(selectedDriver.getFullyQualifiedName(), getDriverStatus().getProgress(), getDriverStatus().getProgressMessage(), getDriverStatus().getErrorMessage(), getDriverStatus().getDriverStartTime(), getDriverStatus().getDriverFinishTime())); getDriverStatus().clear(); }
/** * To lens query. * * @return the lens query */ public LensQuery toLensQuery() { return new LensQuery(queryHandle, userQuery, super.getSubmittedUser(), getPriority(), isPersistent, getSelectedDriver() != null ? getSelectedDriver().getFullyQualifiedName() : null, getSelectedDriverQuery(), status, resultSetPath, driverOpHandle, lensConf, submissionTime, launchTime, driverStatus.getDriverStartTime(), driverStatus.getDriverFinishTime(), endTime, closedTime, queryName, getFailedAttempts()); }
return new QueryRunning(System.currentTimeMillis() - ctx.getDriverStatus().getDriverStartTime(), prevState, currState, query); case EXECUTED:
/** * To lens query. * * @return the lens query */ public LensQuery toLensQuery() { return new LensQuery(queryHandle, userQuery, super.getSubmittedUser(), getPriority(), isPersistent, getSelectedDriver() != null ? getSelectedDriver().getFullyQualifiedName() : null, getSelectedDriverQuery(), status, resultSetPath, driverOpHandle, lensConf, submissionTime, launchTime, driverStatus.getDriverStartTime(), driverStatus.getDriverFinishTime(), endTime, closedTime, queryName, getFailedAttempts()); }
@Test public void testSingleRetrySameDriver() throws LensException, InterruptedException { QueryHandle handle = getQueryService().executeAsync(session, "select 1", getLensConf("driver.retry/single_failure.cost", "1", "driver.retry/double_failure.cost", "2"), "random query"); QueryContext ctx = getQueryService().getQueryContext(handle); while (!ctx.getStatus().finished()) { ctx = getQueryService().getQueryContext(handle); Thread.sleep(1000); } assertEquals(ctx.getFailedAttempts().size(), 1); FailedAttempt failedAttempt = ctx.getFailedAttempts().get(0); assertEquals(failedAttempt.getDriverName(), "retry/single_failure"); assertEquals(ctx.getSelectedDriver().getFullyQualifiedName(), "retry/single_failure"); assertTrue(failedAttempt.getDriverFinishTime() > failedAttempt.getDriverStartTime()); assertTrue(ctx.getDriverStatus().getDriverStartTime() > failedAttempt.getDriverFinishTime()); }
/** * 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); }
/** * 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 public void testDelayedLaunch() throws LensException, InterruptedException { QueryHandle handle = getQueryService().executeAsync(session, "select 1", getLensConf("driver.retry/double_failure.cost", "1", "driver.retry/double_failure.error.message", "fibonacci.500"), "random query"); QueryContext ctx = getQueryService().getQueryContext(handle); while (!ctx.getStatus().finished()) { ctx = getQueryService().getQueryContext(handle); Thread.sleep(1000); } assertTrue(ctx.getStatus().successful()); assertEquals(ctx.getFailedAttempts().size(), 2); FailedAttempt attempt1 = ctx.getFailedAttempts().get(0); FailedAttempt attempt2 = ctx.getFailedAttempts().get(1); assertTrue(attempt2.getDriverStartTime() - attempt1.getDriverFinishTime() >= 500); assertTrue(ctx.getDriverStatus().getDriverStartTime() - attempt2.getDriverFinishTime() >= 1000); }
assertTrue(context.getDriverStatus().getDriverStartTime() > 0); assertTrue(context.getDriverStatus().getDriverFinishTime() > 0);
@Test public void testRetryOnDifferentDriver() throws LensException, InterruptedException { QueryHandle handle = getQueryService().executeAsync(session, "select 1", getLensConf("driver.retry/single_failure.cost", "2", "driver.retry/double_failure.cost", "1"), "random query"); QueryContext ctx = getQueryService().getQueryContext(handle); while (!ctx.getStatus().finished()) { ctx = getQueryService().getQueryContext(handle); Thread.sleep(1000); } assertEquals(ctx.getFailedAttempts().size(), 2); FailedAttempt attempt1 = ctx.getFailedAttempts().get(0); FailedAttempt attempt2 = ctx.getFailedAttempts().get(1); // two retries on double_failure assertEquals(attempt1.getDriverName(), "retry/double_failure"); assertEquals(attempt2.getDriverName(), "retry/double_failure"); // first retry failed on single_failure since the driver checks total retries before failing. // If there weren't any attempts before this one, then this attempt would fail, but since there // have already been 2 attempts and 2 > 1, this attempt passed. assertEquals(ctx.getSelectedDriver().getFullyQualifiedName(), "retry/single_failure"); assertTrue(attempt2.getDriverStartTime() > attempt1.getDriverFinishTime()); assertTrue(ctx.getDriverStatus().getDriverStartTime() > attempt2.getDriverFinishTime()); // test rest api LensQuery lensQuery = RestAPITestUtil.getLensQuery(target(), session, handle, MediaType.APPLICATION_XML_TYPE); assertEquals(lensQuery.getFailedAttempts(), ctx.getFailedAttempts()); }
assertEquals(ctx.getDriverStatus().getProgress(), 1.0); assertTrue(ctx.getDriverStatus().getDriverStartTime() > 0); assertTrue(ctx.getDriverStatus().getDriverFinishTime() > 0);
@Test public void testRestartWhileRetry() throws LensException, InterruptedException { QueryHandle handle = getQueryService().executeAsync(session, "select 1", getLensConf("driver.retry/double_failure.cost", "1", "driver.retry/double_failure.error.message", "fibonacci.5000"), "random query"); QueryContext ctx = getQueryService().getQueryContext(handle); while (ctx.getFailedAttempts().size() == 0) { ctx = getQueryService().getQueryContext(handle); Thread.sleep(1000); } restartLensServer(getServerConf(), false); ctx = getQueryService().getQueryContext(handle); while (!ctx.getStatus().finished()) { ctx = getQueryService().getQueryContext(handle); Thread.sleep(1000); } assertTrue(ctx.getStatus().successful()); assertEquals(ctx.getFailedAttempts().size(), 2); FailedAttempt attempt1 = ctx.getFailedAttempts().get(0); FailedAttempt attempt2 = ctx.getFailedAttempts().get(1); assertTrue(attempt2.getDriverStartTime() - attempt1.getDriverFinishTime() >= 5000); assertTrue(ctx.getDriverStatus().getDriverStartTime() - attempt2.getDriverFinishTime() >= 10000); } }
getDriverStatus().setProgress(0.0); case RUNNING: if (getDriverStatus().getDriverStartTime() == null || getDriverStatus().getDriverStartTime() <= 0) { getDriverStatus().setDriverStartTime(System.currentTimeMillis());
getDriverStatus().setProgress(0.0); case RUNNING: if (getDriverStatus().getDriverStartTime() == null || getDriverStatus().getDriverStartTime() <= 0) { getDriverStatus().setDriverStartTime(System.currentTimeMillis());
QueryDriverStatistics driverStats = new QueryDriverStatistics(); driverStats.setDriverQuery(ctx.getSelectedDriverQuery()); driverStats.setStartTime(ctx.getDriverStatus().getDriverStartTime()); driverStats.setEndTime(ctx.getDriverStatus().getDriverFinishTime()); event.setDriverStats(driverStats);
this.status = ctx.getStatus().getStatus().name(); this.errorMessage = ctx.getStatus().getErrorMessage(); this.driverStartTime = ctx.getDriverStatus().getDriverStartTime(); this.driverEndTime = ctx.getDriverStatus().getDriverFinishTime(); if (ctx.getQueryName() != null) {
this.status = ctx.getStatus().getStatus().name(); this.errorMessage = ctx.getStatus().getErrorMessage(); this.driverStartTime = ctx.getDriverStatus().getDriverStartTime(); this.driverEndTime = ctx.getDriverStatus().getDriverFinishTime(); if (ctx.getQueryName() != null) {